您的位置:首页 > 其它

codeforces 123 div2

2013-08-19 18:58 316 查看
前两题做的还算快,可是最后却没有出题了,原因是题目都看不懂,特别是D题,真想骂几句,这神马意思啊

最后由于做的比较快居然还涨rating了, ——!

E题,并查集的带权合并  w[x]表示x到根的权值和在find的时候合并掉




View Code

#include<cstdio>
const int maxn  = 100010;
const int mod = 1000000007;
int w[maxn],p[maxn];
int find(int x){
if(x==p[x]) return x;
int z=find(p[x]);
w[x]+=w[p[x]];
w[x]%=mod;
return p[x]=z;
}
int main()
{
int n,i,j,k,v,x;
scanf("%d",&n);
int ans=0;
int num=0;
while(n--)
{
num++;
p[num]=num;
w[num]=0;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&v,&x);
int f=find(v);//printf("f=%d %d\n",f,w[f]);
p[f]=num;
w[f]=(w[v]+x)%mod;
ans=(ans+w[f])%mod;
if(ans<0) ans+=mod;
}
}
printf("%d\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: