zoukankan      html  css  js  c++  java
  • UVA3644

    题意:有一些简单化合物,每个化合物都由两种元素组成,每个元素用一个大写字母组成,你是一个装箱工人,从实验员那里按照顺序依次把一些简单化合物装到车上,但是这里存在一个安全隐患,如果车上存在k个简单化合物,正好包含k中元素,那么他们将组成一个易爆易燃的化合物,为了安全起见,每当你拿到一个化合物的时候,如果他和已装车的化合物形成易爆化合物,你就应当拒绝装车,否则就应该装车,编程输出有多少个没有装车的化合物。

    简单分析一下,从第一个化合物开始,如果第二个化合物组成元素与之完全相同,那么是易爆物,不能装车,应当拒绝;否则装车,再看第三个化合物...列举所有情况发现其实就是简单的并查集。

    代码如下:

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    const int MAXN = 100000 + 10;
    int p[MAXN];
    int findset(int x){
    	return p[x] != x ? p[x] = findset(p[x]) : x;
    }
    int main(){
    	int x, y;
    	while(scanf("%d", &x) != EOF){
    		int refusals = 0;
    		for(int i=0; i<MAXN; i++)
    			p[i] = i;
    		while(x!=-1){
    			scanf("%d", &y);
    			x = findset(x);
    			y = findset(y);
    			if(x==y) refusals++;
    			else p[x] = y;
    			scanf("%d", &x);
    		}
    		printf("%d\n", refusals);
    	}
    }



  • 相关阅读:
    hdu 6440 Dream(费马小定理+构造)
    [POJ3107]Godfather
    [POJ2488]A Knight's Journey
    [POJ3009]Curling 2.0
    [BZOJ1040][CODEVS1423][ZJOI2008]骑士
    [BZOJ1103] [POI2007]大都市meg
    BZOJ1827 [Usaco2010 Mar]gather 奶牛大集会
    [codevs1286]郁闷的出纳员
    [codevs3044]矩形面积求并
    BZOJ4563[Haoi2016]放棋子
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3207871.html
Copyright © 2011-2022 走看看