• hdu 3926 Hand in Hand


    http://acm.hdu.edu.cn/showproblem.php?pid=3926

    这道题是判断两个图是不是同构相似。只要判断图中环的个数和链的个数,和每个环的节点数和链的节点数是否相等。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 #define maxn 30000
      5 using namespace std;
      6 
      7 int t,n1,m1,n2,m2;
      8 int f[maxn],num[maxn];
      9 int cicl[maxn];
     10 struct node
     11 {
     12     int lis;
     13     int cicl;
     14     bool operator <(const node &a)const
     15     {
     16         return ((lis<a.lis)||(lis==a.lis&&cicl<a.cicl));
     17     }
     18 }p1[maxn],p2[maxn];
     19 
     20 int find1(int x)
     21 {
     22     if(x==f[x]) return x;
     23     return f[x]=find1(f[x]);
     24 }
     25 
     26 void merge1(int a,int b)
     27 {
     28     int fa=find1(a);
     29     int fb=find1(b);
     30     if(fa==fb)
     31     {
     32         cicl[fa]=1;
     33         return;
     34     }
     35     num[fa]+=num[fb];
     36     f[fb]=fa;
     37 }
     38 
     39 void inti(int n)
     40 {
     41     for(int i=0; i<=n; i++)
     42     {
     43         f[i]=i;
     44         num[i]=1;
     45     }
     46     memset(cicl,0,sizeof(cicl));
     47 }
     48 
     49 int main()
     50 {
     51     scanf("%d",&t);
     52     for(int ca=1; ca<=t; ca++)
     53     {
     54         scanf("%d%d",&n1,&m1);
     55         inti(n1);
     56         for(int i=0; i<m1; i++)
     57         {
     58             int a,b;
     59             scanf("%d%d",&a,&b);
     60             merge1(a,b);
     61         }
     62         int cnt1=0;
     63         for(int i=1; i<=n1; i++)
     64         {
     65             if(f[i]==i)
     66             {
     67                 p1[cnt1].lis=num[i];
     68                 p1[cnt1++].cicl=cicl[i];
     69             }
     70         }
     71         scanf("%d%d",&n2,&m2);
     72         inti(n2);
     73         int cnt2=0;
     74         for(int i=0; i<m2; i++)
     75         {
     76             int a1,b1;
     77             scanf("%d%d",&a1,&b1);
     78             merge1(a1,b1);
     79         }
     80         for(int i=1; i<=n2; i++)
     81         {
     82             if(f[i]==i)
     83             {
     84                 p2[cnt2].lis=num[i];
     85                 p2[cnt2++].cicl=cicl[i];
     86             }
     87         }
     88         //printf("....%d %d
    ",cnt1,cnt2);
     89         printf("Case #%d: ",ca);
     90         if(n1!=n2)
     91         {
     92             printf("NO
    ");
     93             continue;
     94         }
     95         if(cnt1!=cnt2)
     96         {
     97             printf("NO
    ");
     98             continue;
     99         }
    100         bool flag=true;
    101         sort(p1,p1+cnt1);
    102         sort(p2,p2+cnt2);
    103         for(int i=0; i<cnt1; i++)
    104         {
    105             if(p1[i].lis!=p2[i].lis||(p1[i].cicl!=p2[i].cicl))
    106             {
    107                 flag=false;
    108                 printf("NO
    ");
    109                 break;
    110             }
    111         }
    112         if(flag)
    113         {
    114             printf("YES
    ");
    115         }
    116     }
    117     return 0;
    118 }
    View Code
  • 相关阅读:
    (六)cmockery中的assert_macro分析
    (五)cmockery中的assert_module分析
    (三)cmockery中的消息打印以及可变参数相关总结
    (四)cmockery中allocate_moudle分析
    (二)cmockery中run_tests.c分析
    大家分层架构 事务
    北冰洋教Myeclipse的创建 项目名
    MYSQL第一章 创建表 修改表名 删除字段 添加字段 修改地段名
    HTML-------实现图片阴影
    HTML 制作爱奇艺播放器 排版
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3735722.html
Copyright © 2020-2023  润新知