星際旅行
所有邊都是雙向邊,建完圖後每個點的度數都是偶數
去掉兩條邊,剩下的邊一定可以組成尤拉迴路
1>去掉兩條有公共頂點的邊
2>去掉兩個字自環
3>去掉1個自環+一條邊(不是自環)
注意檢查邊是否連通,不是點是否連通
#include#include#include#define maxn 100005
#define ll long long
using namespace std;
int n,m;
struct edge
e[maxn];
int fa[maxn],d[maxn];
ll ans=0,cnt;
bool vis[maxn];
int find(int x)
int main()
else cnt++;
fa[find(x)]=find(y);
}int t=find(op);
bool no=0;
for(int i=1;i<=n;i++)
if(vis[i]&&find(fa[i])!=t)
if(no)
for(int i=1;i<=n;i++)
ans+=(ll)d[i]*(ll)(d[i]-1)/2;
ans+=cnt*(m-cnt)+cnt*(cnt-1)/2;
printf("%lld\n",ans);
//while(1);
return 0;
}
砍樹
c=k+sum(a[i]);
sum(|a[i]/d|)<=c/d;c/d 大概有c^0.5過個取值
f[d]=c/d
l1=1, r=c/(c/l)
對於每一段當d==r時,t=sum(| a[i]/d| )會最小,如果t<=f[t],更新ans
#include#include#include#define ll long long
#define maxn 1000002
using namespace std;
int n,num;
ll a[105];
ll f[maxn],r[maxn];
long long k,sum;
inline void pre() }
ll get(ll x,ll y)
int main()
pre();
ll t=0,ans=0;
for(int i=1;i<=num;i++)
printf("%lld\n",ans);
//while(1);
return 0;
}
超級樹
f[i][j]深度為i的樹,同時存在j條點不重複的路徑的方案數
考慮i->i+1
num=f[i-1][l]*f[i-1][r]
什麼也不增加 f[i][l+r]+=num
加上根節點 f[i][l+r+1]+=num
根節點與左(右)子樹中一條路徑連邊 f[i][l+r]+=num*(l+r)*2
根節點把左子樹與右子樹的一條路徑連起來 f[i][l+r-1]+=num*l*r*2
根節點與左子樹(右子樹)的兩條路徑連邊 f[i][l+r-1]+=num*(l*(l-1)+r*(r-1))
#include#include#include#define ll long long
using namespace std;
int k;
ll mod,num;
ll f[305][605];
int main()
}else break;
}printf("%lld\n",f[k][1]%mod);
//while(1);
return 0;
}
ctsc2010 星際旅行
題意很簡單 給定一棵樹,問從根分別走到每個節點的最長路程,其中每個點給定lim,即最多從該點出發lim次,保證lim大於等於該點的度數。特別 鳴謝 ldl在他的模擬題中出了這道題。當題解講這要用樹形dp解網路流模型時,都被驚異了,完全沒有想到網路流,也完全沒有必要網路流,atm在考場上直接有樹形dp...
BFS HRBUST 2188 星際旅行
星際旅行 time limit 1000 ms memory limit 32768 k total submit 150 66 users total accepted 80 60 users rating special judge no description 小z在星際旅行中,他想從當前起始...
bzoj 1917 Ctsc2010 星際旅行
公元3000年,地球聯盟已經攻占了銀河系內的n個星球,出於資金的考慮,僅僅在星球間建立了n 1條雙向時空隧道保證任意兩個星球之間互相可達。出於管理上的考慮,第i個星球的行政長官要求每個公民在一年內不得從該星球利用時空隧道次數超過hi次 這一統計是基於離開次數統計的,如果你已經使用從該星球離開過hi次...