zoukankan      html  css  js  c++  java
  • Uva-1160-X-Plosives

    题目大意:每次输入两个顶点,如果与已输入的顶点可以连成一个环则不放入这两个顶点,否则添加这两个顶点。

    本题考查图问题中判断是否为环,可用并查集解决,具体见代码。

    //simonPR
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <stack>
    using namespace std;
    const int maxn=100010;
    int fa[maxn];
    int findset(int x){
        return fa[x]==x?x:fa[x]=findset(fa[x]);
    }
    int main()
    {
        int x,y;
        int result=0;
        for(int i=0;i<=maxn;i++) fa[i]=i;
        while(scanf("%d",&x)==1){
            result=0;
            for(int i=0;i<=maxn;i++) fa[i]=i;
            while(x!=-1){
                scanf("%d",&y);
                int fx=findset(x),fy=findset(y);   //找x,y的祖先。
                if(fx==fy) result++;      //如果祖先相同,则表示它们在一个环里,则不能加入。
                else fa[fx]=fy;          //祖先不同,则把两个点合并到一个祖先。
                scanf("%d",&x);
            }
            printf("%d
    ",result);
        }
        return 0;
    }
  • 相关阅读:
    JAVA闰年测试与解决非法输入
    Junit介绍与实现
    等价类划分方法的应用
    使用Visual Studio 2013进行UI自动化测试
    简谈软件测试
    【Software Project Management】Quizs
    White box testing
    peer review
    闰年问题
    热烈庆贺清明小长假的到来
  • 原文地址:https://www.cnblogs.com/RRirring/p/4550699.html
Copyright © 2011-2022 走看看