博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I - Ant Trip (无向图欧拉回路+并查集),判断
阅读量:5067 次
发布时间:2019-06-12

本文共 1649 字,大约阅读时间需要 5 分钟。

参考博客:

参考:

 题意:给你无向图的 N 个点和 M 条边,保证这 M 条边都不同且不会存在同一点的自环边,现在问你至少要几笔才能所有边都画一遍。(一笔画的时候笔不离开纸)

思路:先并查集将无向图的每个连通图分开,同时将所有点的度算一遍,

原图应是由若干个无向连通图组成的
当这个无向连通图只有一个点时,这是一个孤立点,不做操作,也就是只有一个点时特判
否则:计算每个无向图的奇度点的个数(可以通过find操作,将个数存在每个图集的代表点处,也就是find处)
   
如果奇度点的个数为0,表示是欧拉回路
  如果奇度点的个数>=2,表示是对应的欧拉路径(欧拉回路也是欧拉路径)
  所以:   对欧拉路径 :笔画数=奇度点数 / 2
     对欧拉回路:笔画数=等于1 
WA点:单点图要特判掉,虽然它也是欧拉回路,但是无边,对此题来说不需要安排蚂蚁去
无向连通图奇度点个数不可能为奇数
代码:
1 ***********************************************/ 2 int in[maxn],out[maxn]; 3 int st[maxn]; 4 int V[maxn]; 5 int num[maxn];  6     int n,m; 7  8 int find(int t) 9 {10     while(st[t]!=t) t=st[t];11     return t;12 }13 14 void add(int a,int b)15 {16     int fa=find(a);17     int fb=find(b);18     if(fa>fb) st[fa]=fb;19     else st[fb]=fa;20 }21 22 int main()23 {24 25     while(cin>>n>>m)26     {27         mem0(in);28         mem0(V); 29         mem0(st);30         mem0(num);31         for(int i=1;i<=n;i++) st[i]=i;32         for(int i=1;i<=m;i++)33         {34             int a,b;35             sc2(a,b);36             in[a]++;37             in[b]++;38             add(a,b);39         }40         int ans=0;41         for(int i=1;i<=n;i++) 42         {43             if(in[i]%2) V[find(i)]++;//奇数度的个数 44             num[find(i)]++;45         }46         for(int i=1;i<=n;i++) 47         {48             if(st[i]==i)49             {50                 //当是1个点的时候,特判51                 if(num[i]==1) continue;//因为一个点的图没有边 52                 if(V[i]>=2) ans+=(V[i]/2);53                 else ans++;//是欧拉回路 54             }55         }56         cout<
<
View Code

 关于欧拉与哈密:

 

 

 

 

转载于:https://www.cnblogs.com/liuyongliu/p/10321801.html

你可能感兴趣的文章
ajax
查看>>
poj1981 Circle and Points 单位圆覆盖问题
查看>>
POP的Stroke动画
查看>>
线程同步机制初识 【转载】
查看>>
Oracle 游标使用全解
查看>>
SQL语句在查询分析器中可以执行,代码中不能执行
查看>>
yii 1.x 添加 rules 验证url数组
查看>>
html+css 布局篇
查看>>
银行排队问题(详解队列)
查看>>
序列化和反序列化(1)---[Serializable]
查看>>
SQL优化
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
4.9 Parser Generators
查看>>
redis集群如何清理前缀相同的key
查看>>
redis7--hash set的操作
查看>>
20.字典
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
oracle用户锁定
查看>>
(转)盒子概念和DiV布局
查看>>