Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:还是不明白下面大牛提到的相对偏移In Reply To:Re:还是不明白下面大牛提到的相对偏移 Posted by:lithum at 2009-07-24 16:29:25 我把majiaN大牛的代码给补充成一个完整的程序了,代码如下,希望对你有帮助:-) #include<iostream> using namespace std; int N,K; int D,X,Y; int lyn; int p[100001]; int ch[50001]; int find(int k); void check(int x,int y,int d); int main() { //freopen("input.txt","r",stdin); lyn=0; int i; cin>>N>>K; memset(ch,0,sizeof(ch)); for(i=0;i<N+1;i++) p[i]=i; for(i=0;i<K;i++) { scanf("%d %d %d",&D,&X,&Y); check(X,Y,D-1); } cout<<lyn<<endl; return 0; } int find(int k) { if (p[k]==k) return k; int t=find(p[k]);//t被赋值为k结点的最终根 ch[k]=(ch[k]+ch[p[k]])%3; //这个向量关系需要发现 p[k]=t; return t; } void check(int x,int y,int d) { int tp=find(x),tq=find(y); if(x>N||y>N) { ++lyn; return; } if (tp==tq) { if ((ch[x]-ch[y]+3)%3!=d)//这个关系根据上面的可以自己用向量推 { ++lyn; } return; } p[tp]=tq; ch[tp]=(ch[y]-ch[x]+d+6)%3;//这个同理 } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator