hdu 3018(欧拉回路)
来源:互联网 发布:苏联政治笑话 知乎 编辑:程序博客网 时间:2024/05/20 16:12
点击打开链接
题目说有n个点,m跳路,让你分最少的组,使,每组都走一天欧拉通路。。
通过判断度数是奇偶性来确定是否为欧拉回路;总之笔划数 = 奇度点数/2 + 欧拉回路数;
#include"stdio.h"#include"string.h"#define N 100001int a[N*2],b[N*2];struct node{int father;int rank;int degree;int count;}A[N];int find(int x){if(A[x].father==x)return x;A[x].father=find(A[x].father);return A[x].father;}void merge(int a,int b){if(A[a].rank>=A[b].rank){A[b].father=a;if(A[a].rank==A[b].rank)A[a].rank++;A[a].count+=A[b].count;}else{A[a].father=b;A[b].count+=A[a].count;}}int main(){int n,m;int i,j;int x,y;while(scanf("%d%d",&n,&m)!=-1){memset(A,0,sizeof(A));for(i=0;i<=n;i++)A[i].father=i;for(i=0;i<m;i++){scanf("%d%d",&a[i],&b[i]);A[a[i]].degree++;A[b[i]].degree++;}for(i=1;i<=n;i++)if(A[i].degree%2)A[i].count=1;for(i=0;i<m;i++){x=find(a[i]);y=find(b[i]);if(x!=y)merge(x,y);}int ans=0;for(i=1;i<=n;i++){if(A[i].degree&&A[i].father==i){if(A[i].count!=0)ans+=A[i].count/2;else ans++;}}printf("%d\n",ans);}return 0;}
- hdu 3018(欧拉回路)
- hdu 3018 欧拉回路
- HDU-3018-欧拉回路
- hdu 3018 欧拉回路
- HDU 1878 欧拉回路(判断欧拉回路)
- HDU 1878 欧拉回路(欧拉回路)
- HDU 欧拉回路
- 欧拉回路 HDU
- HDU 欧拉回路
- HDU 3018 Ant Trip(欧拉回路)
- [欧拉回路] hdu 3018 Ant Trip
- [欧拉回路] hdu 3018 Ant Trip
- hdu 3018 Ant Trip 欧拉回路
- hdu 1878(欧拉回路)
- HDU 2894 DeBruijin(欧拉回路)
- hdu 欧拉回路(判断)
- HDU 1878 欧拉回路(DFS)
- HDU 1878 欧拉回路(入门)
- 捕捉鼠标拖动和鼠标移动事件
- JS 的选择
- 手动安装mysql服务
- 使用 DJ Java Decompiler 将整个jar包反编译成源文件
- openssl在windows编译及使用
- hdu 3018(欧拉回路)
- HDOJ (HDU) 1561 The more, The Better (树形DP)
- ubuntu命令
- 【js学习笔记-010】--日期和时间
- NandFlash详述
- listView图片错乱
- Nginx 日志分析
- java设计模式---单例模式
- poj3894 System Engineer 二分图匹配(匈牙利算法的DFS实现)