时间: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;}