-
时间:2016-03-19 12:26:47 星期六
-
题目编号:[2016-03-19][UVALive][3644][X-Plosives]
-
题目大意:n个物品如果含有n个元素,就会爆炸,会爆炸的话就不能放入仓库,问有多少个物品不能放入仓库
-
分析:每次加入一个物品,如果含有新的元素,那么元素的数目始终大于物品的数目1个,如果新的物品含有已经存在的元素,那么一定会爆炸
-
方法:并查集,已经加入的元素就不加
#include <cstdio>
using namespace std;
#define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
const int maxn = 1E5 + 100;
int fa[maxn];
void ini(){
FOR(i,0,maxn) fa[i] = i;
}
int fnd(int x){
return x == fa[x]?x:fa[x] = fnd(fa[x]);
}
int uni(int x,int y){
x = fnd(x);y = fnd(y);
if(x == y) return 0;
fa[x] = y;
return 1;
}
int main(){
int u,v;
while(~scanf("%d",&u)){
int ans = 0;
ini();
while(~u){
scanf("%d",&v);
if(!uni(u,v)) ++ans;
scanf("%d",&u);
}
printf("%d\n",ans);
}
return 0;
}
时间: 2024-10-10 22:42:01