PKU 1182 食物鏈(並查集的應用)

來源:互聯網
上載者:User

Source Code</p><p>Problem: 1182 User: zhouxc<br />Memory: 980K Time: 422MS<br />Language: G++ Result: Accepted </p><p>Source Code<br />#include "iostream"</p><p>using namespace std;<br />int n,m,x,y,c,test,dist;<br />int p[50001],rank[50001],level[50001];</p><p>void Make_set()<br />{</p><p> for(int i=1;i<=n;i++)<br /> {<br /> p[i]=i;<br /> rank[i]=0;<br /> level[i]=0;<br /> }<br />} </p><p>int Find_set(int a)<br />{<br /> if(p[a]!=a)<br /> {<br /> dist+=level[a];<br /> return Find_set(p[a]);<br /> }<br /> else return p[a];<br />}<br />int Union(int c1,int c2)<br />{<br /> dist=0;<br /> int a=Find_set(c1);<br /> int dist1=dist%3;<br /> dist=0;<br /> int b=Find_set(c2);<br /> int dist2=dist%3;<br /> // cout<<a<<" "<<b<<endl;<br /> // cout<<dist1<<" "<<dist2<<endl; cout<<"**********"<<endl;<br /> if(c==1)<br /> {<br /> if(a==b)<br /> {<br /> if(dist1==dist2)<br /> return 1;<br /> else<br /> return 0;<br /> }<br /> else<br /> {<br /> if(rank[a]>rank[b])<br /> {<br /> p[b]=a;<br /> level[b]=(dist1-dist2+3)%3;<br /> }<br /> else if(rank[a]<rank[b])<br /> {<br /> p[a]=b;<br /> level[a]=(dist2-dist1+3)%3;<br /> }<br /> else<br /> {<br /> p[b]=a;<br /> rank[a]++;<br /> level[b]=(dist1-dist2+3)%3;<br /> }<br /> }<br /> }<br /> else<br /> {<br /> if(a==b)<br /> {<br /> if((dist1-dist2+3)%3==2)<br /> return 1;<br /> else<br /> return 0;<br /> }<br /> else<br /> {<br /> if(rank[a]>rank[b])<br /> {<br /> p[b]=a;<br /> level[b]=(dist1-dist2+4)%3;<br /> }<br /> else if(rank[a]<rank[b])<br /> {<br /> p[a]=b;<br /> level[a]=(dist2-dist1+5)%3;<br /> }<br /> else<br /> {<br /> p[b]=a;<br /> rank[a]++;<br /> level[b]=(dist1-dist2+4)%3;<br /> }<br /> }<br /> }<br /> return 1;</p><p>}<br />int main()<br />{</p><p> int mistake=0;<br /> scanf("%d%d",&n,&m);<br /> Make_set();<br /> for(int i=1;i<=m;i++)<br /> {<br /> scanf("%d%d%d",&c,&x,&y);<br /> if(x>n||y>n)<br /> mistake++;<br /> else<br /> if(!Union(x,y))<br /> mistake++;<br /> }<br /> printf("%d/n",mistake); </p><p> return 0; </p><p>} </p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.