• uva10054


    题意:给你n个珠子,一个珠子分为两半有两种颜色,用1到50来表示50种不同的颜色。把这些珠子串起来,两个紧挨着的珠子要满足一个条件就是接触的那部分颜色要相同

    例如(1,2)(2,4),两个珠子的接触部分颜色相同都为2。当然,因为珠子最后是连成环的,第一个珠子和最后一个珠子也会接触,也要买满足这个条件

    先输入T,有T组数据

    输入n,有n个珠子

    下面n行每行两个数字表示这个珠子的两个颜色,然后问你能不能连成一条链,能的话输出任意一种连接情况即可,不能的话输出失败

    其本质是欧拉回路,欧拉回路的题只做过每背景的裸题,第一次做这个,想不到是欧拉回路,然后想了差不多一个小时才想到是欧拉回路,说说思考的思路

    其实1到50代表50钟颜色也就是50个点,一个珠子的信息例如(1,2)其实就是一个无向边(1,2),注意是无向边,因为珠子是可以转过来的,(1,2)=(2,1),那么无疑就可以建立一个图了

    另外,给你的n个珠子如果是能连成链的话,那么其实任意一个珠子都可以作为起点,最后要回到自己,然后就想到,那不就是在已有的图中进行遍历,遍历了所有的点然后回到自己吗?怎么那么像那么欧拉的………………然后再思考了一些细节,稍微推理了一下确定了就是要判断是否存在欧拉回路,若存在即输出路径

    无向图的欧拉回路判断和路径输出

    1.判断所有的点的度是否为偶数,如果有点不为偶数,则不存在欧拉回路

    2.满足1的条件下,判断所给的图是否连通,不连通也不是欧拉回路

    3.满足1和2的就是欧拉回路,然后dfs逆序输出路径,主要一定要逆序,不逆序是错的,后面会解释

    经过有意的测试那先这道题是不需要判断图连通的,也就是所给数据图一定是连通的,所以直接判断度即可

    先给出代码,在详细分析

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;

    const int maxn=100;
    int  du[maxn],tu[maxn][maxn];
    int n;

    void print(int u){
         for (int i=1;i<=50;i++){
            if(tu[u][i]){
                tu[u][i]--;
                tu[i][u]--;
                print(i);
                printf("%d %d ",i,u);
            }
         }
    }
    int  main(){
        int t;
        int cas=0;
        int u,v;
        scanf("%d",&t);
        while(t--){
            memset(tu,0,sizeof(tu));
            memset(du,0,sizeof(du));
            if(cas) printf(" ");
            printf("Case #%d ",++cas);
            scanf("%d",&n);
            for (int i=1;i<=n;i++){
                scanf("%d %d",&u,&v);
                du[u]++;
                du[v]++;
                tu[u][v]++;
                tu[v][u]++;
            }
            int j;
            for (j=1;j<=50;j++){
                if(du[j]%2) break;
            }
            if(j<=50) printf("some beads may be lost ");
            else {
                for (int i=1;i<=50;i++)
                    print(i);
            }
        }
    return 0;
    }

  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/lmjer/p/8178642.html
Copyright © 2020-2023  润新知