LA 3644 易爆物 并查集
生活随笔
收集整理的這篇文章主要介紹了
LA 3644 易爆物 并查集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645
題意:有一些化合物,每種化合物中含有兩種元素,如果有k種化合物含有K種元素就會爆炸,現在裝車司機按照輸入順序一件一件的裝,遇到加入后會爆炸的化合物就不裝,問會有多少化合物不能被裝入。
解法:將每種元素看成一個頂點,一個化合物含有兩種元素就是一條邊,構圖完成后,出現環就意味著爆炸,所以用并查集,像Kruskal算法一樣為同一連通分量的為同一個父節點,加入某種化合物,該化合物的兩種元素已經連通,如果再加進來就會出現環。。。拒絕該化合物進入。
貼代碼:
1 #include<cstdio> 2 #include<cstring> 3 const int N=100005; 4 int pa[N]; 5 int findset(int x) 6 { 7 return pa[x] == -1 ?x:x=findset(pa[x]); 8 } 9 int main() 10 { 11 // freopen("in.txt","r",stdin); 12 int cnt,x,y; 13 while(scanf("%d",&x) == 1) 14 { 15 cnt =0; 16 memset(pa,-1,sizeof(pa)); 17 while(x != -1) 18 { 19 scanf("%d",&y); 20 x = findset(x) ; 21 y = findset(y); 22 if(x==y ) ++cnt; 23 else pa[x]=y; 24 scanf("%d",&x); 25 } 26 printf("%d\n",cnt); 27 } 28 return 0; 29 } View Code?
轉載于:https://www.cnblogs.com/allh123/p/3287511.html
總結
以上是生活随笔為你收集整理的LA 3644 易爆物 并查集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 开发者必不可少的 75 个工具
- 下一篇: 音乐歌名网名,好听的歌词昵称558个