UVALive 3644

Posted Blogggggg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVALive 3644相关的知识,希望对你有一定的参考价值。

本篇是刘汝佳《算法竞赛入门经典——训练指南》的读书笔记。

知识点:  并查集

解题思路:

  将每种元素看成一个点,而每种化合物看成是由两种元素(即两个点组成的一条边),以此建图。如果加入某一条边后会出现环(即\(k\)条边(化合物),\(k\)个点(元素)),那么我们就不将这条边加入图中,即\(ans+1\).

  用并查集来维护这个图,如果一条边的两个点本来就相连(即其根节点相同),那么就说明加入这条边后会出现环。

AC代码:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int maxn = 1e5+10;
 5 
 6 int par[maxn];
 7 void init(){
 8     for(int i=0;i<maxn;i++)
 9         par[i]=i;
10 }
11 int finds(int x){
12     if(par[x]==x)   return x;
13     return par[x]=finds(par[x]);
14 }
15 int main(){
16     int a,b;
17     int ans=0;
18     init();
19     while(scanf("%d",&a)==1){
20         if(a==-1){
21             printf("%d\n",ans);
22             ans=0;
23             init();
24             continue;
25         }
26         scanf("%d",&b);
27         a=finds(a),b=finds(b);
28         if(a==b)  ans++;
29         else  par[a]=b;
30     }
31     return 0;
32 }

 

以上是关于UVALive 3644的主要内容,如果未能解决你的问题,请参考以下文章

UVALive 3644

LA 3644 易爆物

MSB3644 - 缺少 .NET 4.5 SDK [关闭]

UVALive 3971 Assemble(模拟 + 二分)

UVALive 4256Salesmen

UVALive 4726 Average ——(斜率优化DP)