[FOJ 2112][Vjudge 35186] Tickets [并查集+一笔画问题]
来源:互联网 发布:log4cpp linux编译 编辑:程序博客网 时间:2024/04/30 10:21
给一个图,问最少加多少条边能让其一笔画出来
如果一个图是连通的且其中度为奇数的点的个数为0个或2个,那么可以一笔画出来
用并查集维护每个联通块的度为奇数的点的个数,如果大于2且为n个,那么需要补n/2条边(每条边让两个度为奇数的点变为偶数),最后再用联通块个数-1条边来将不同的联通块连起来
#include <cstdio>struct DisjoinSet {int f[100010];int num[100010];int deg[100010];int odd[100010];int n;void clear(int n) {for (int i=1;i<=n;i++) {deg[i]=0;odd[i]=0;f[i]=i;num[i]=1;}this->n=0;}void print(int n) {printf("deg[i]:");for (int i=1;i<=n;i++) printf("%d ",deg[i]);printf("\n");printf("num[i]:");for (int i=1;i<=n;i++) printf("%d ",num[i]);printf("\n");printf("odd[i]:");for (int i=1;i<=n;i++) printf("%d ",odd[i]);printf("\n");printf("fth[i]:");for (int i=1;i<=n;i++) printf("%d ",f[i]);printf("\n");}int get(int x) {if (f[x]==x) return x;return f[x]=get(f[x]);}void tosame(int x,int y) {deg[x]++;deg[y]++;x=get(x);y=get(y);if (x==y) return;if (num[y]==1&&num[x]==1) n++;else if (num[y]!=1&&num[x]!=1) n--;num[y]+=num[x];f[x]=y;}int getAns(int n) {int i;int ans=this->n-1;//printf("--%d\n",this->n);for (i=1;i<=n;i++) {if (deg[i]%2==1) odd[get(i)]++;}for (i=1;i<=n;i++) {if (odd[i]) ans+=odd[i]/2-1;}return ans;}};int n,m;DisjoinSet c;int main() {int t,x,y;scanf("%d",&t);while (t--) {scanf("%d%d",&n,&m);c.clear(n);//c.print(n);while (m--) {scanf("%d%d",&x,&y);c.tosame(x,y);//c.print(n);}printf("%d\n",c.getAns(n));//c.print(n);}return 0;}
0 0
- [FOJ 2112][Vjudge 35186] Tickets [并查集+一笔画问题]
- 并查集-一笔画
- nyist 42一笔画问题(并查集+欧拉图)
- NYOJ42 一笔画问题 【欧拉回路】+【并查集】
- NYOJ--42一笔画问题【并查集】
- 一笔画问题(nyoj42)(并查集+欧拉图)
- NYOJ 42 一笔画问题 【欧拉图 + 并查集】
- 并查集 深搜 nyoj 42 一笔画问题
- 一笔画问题(并查集+无向欧拉图)
- ny 42 一笔画问题【欧拉路+并查集】
- nyoj--42--一笔画问题(并查集)
- nyoj-一笔画问题(欧拉图+并查集)
- NYOJ 42 一笔画问题 (DFS || 并查集)
- nyoj 一笔画问题 【并查集+欧拉】
- nyoj 一笔画问题(并查集,欧拉路)
- NYOJ42 一笔画问题(欧拉路+并查集)
- nyoj 一笔画(并查集)
- 并查集-一笔画优化
- Delphi中获取文件夹路径的三种方式 和实现文件复制
- java中this关键字小结
- Garden of Eden uva +回溯
- ngx lua模块源码简单解析
- java开发过程中遇到的一些jar包的作用
- [FOJ 2112][Vjudge 35186] Tickets [并查集+一笔画问题]
- 程序员需谨记的8条团队开发原则
- 大量数据更新导致fgc频繁引起jvm服务暂停。
- dhcp server and client in ubuntu12.04
- 两台Redhat搭建Puppet实践
- 关于VMware API的资料收集
- IIS7 和IIS8.0 HTTP 错误 ---500.19--- - Internal Server Error 问题的解决方案
- PLDA源代码分析(1)-PLDA_Train
- Linux 磁盘空间大小统计du命令常见用法