codeforces 123 div2
前两题做的还算快,可是最后却没有出题了,原因是题目都看不懂,特别是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); }