CF723E. One-Way Reform(欧拉回路)
题目链接:https://codeforces.ml/contest/723/problem/E
描述:
给出一个无向图,确定边的方向,是入度等于出度的点最多。
分析:
有一个重要的定理:一个无向图度数为奇数的点必有偶数个。
所有度数为偶数的点均可以满足出度等于入度。
所以可以将所有度数是奇数的点连向虚点n+1,这样新建的图满足欧拉回路,跑一边欧拉回路,便可得到边的方向。输出时与0相连的边注意删掉。
#include<bits/stdc++.h>
#define N 210
#define ll long long
#define pii pair<int,int>using namespace std;
vector<pair<int,int> >ans;
vector<int>v[N];
int n,d[N],m,vis[N][N];
void dfs(int x){for(int i=0;i<v[x].size();i++){int to=v[x][i];if(!vis[to][x]){vis[to][x]=1;vis[x][to]=1;dfs(to);ans.push_back(make_pair(x,to));}}
}
int main(){int qt;scanf("%d",&qt);while(qt--){scanf("%d%d",&n,&m);int x,y;for(int i=1;i<=n+1;i++)d[i]=0,v[i].clear();for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);v[x].push_back(y);v[y].push_back(x);d[x]++;d[y]++;}ans.clear();for(int i=1;i<=n+1;i++)for(int j=1;j<=n+1;j++)vis[i][j]=0;int t=0;for(int i=1;i<=n;i++){if(d[i]%2==1){v[n+1].push_back(i);v[i].push_back(n+1);t++;}}printf("%d\n",n-t);for(int i=1;i<=n;i++)dfs(i);for(int i=0;i<ans.size();i++){if(ans[i].first!=n+1&&ans[i].second!=n+1)printf("%d %d\n",ans[i].first,ans[i].second);}}return 0;
}
CF723E. One-Way Reform(欧拉回路)相关推荐
- CF723E:One-Way Reform
传送门 答案上界为该无向图中的偶点数量,可以通过构造使得答案达到上界 所以答案就是偶点数量 可是还要输出方案,可以创造一个虚点与所有奇点连边,这样一来就可以跑欧拉路 顺便答案是n-奇点个数 Code: ...
- CF723E 欧拉回路
题目大意 将无向图转为有向图,并且出度等于入度的点的数目最大.无重复边有孤立点 题解 将度数为奇数的点连接 跑欧拉回路 将 原来的边输出 #include <iostream> #incl ...
- CF723E(欧拉回路)
题意: 给出一个有向图,要求给每条边重定向,使得定向后出度等于入度的点最多,输出答案和任意一种方案. 分析: 将图看作无向图,对每条边重定向 首先我们肯定分成多个连通分量来考虑,每一个连通分量都是一个 ...
- [模板][持续更新]欧拉回路与欧拉路径浅析
Luogu P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与 ...
- uoj 117 欧拉回路
1.判断是否为欧拉存在欧拉回路---裸的判断 欧拉回路就是看一笔能不能把途中所有的边跑完没得重复 对于无向边----建立双向边判断每个点的入度是否为2的倍数 1.1 对于有向边---建立单向边判断 ...
- 图论--欧拉路,欧拉回路(小结)
在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...
- hdu 1878 欧拉回路
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- poj1386(判断一个有向图是否存在欧拉回路)
1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题2:判断一个图是否有欧拉路径: (1) ...
- HDU1878(判断一个无向图是否存在欧拉回路)
1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题1:判断一个无向图是否有欧拉回路的充要 ...
最新文章
- 【Qt】解决在linux上使用Qt的媒体模块(Qt += multimedia)缺少模块multimedia的问题
- 虚拟化--015 配置VMware View Event database失败:
- java 日期的加减_用java实现日期类的加减
- 一篇文章搞定GVIM(根据工作经验持续更新)
- boost::statechart模块测量 BitMachine 的事件处理性能的测试程序
- 采用静态配置文件方式实现AOP
- 【渝粤教育】广东开放大学 演讲与口才 形成性考核 (1)
- java isempty_Java ArrayDeque isEmpty()方法与示例
- python解释器遇到if __name__==__main__会如何做?
- ntp协议中 服务器失效怎么办,排除网络时间协议(NTP)故障
- 疫情之下 SaaS 市场两极分化,SaaS 厂商如何突围严峻形势?
- rollback 最后判断成功_最后4天!这些你知道吗?
- 金毅泓:10.6美元持续上涨,金价萎靡关注晚间ADP数据
- STM32之字模软件的使用
- matlab求六自由度机械臂,基于人工势场的六自由度空间机械臂避障路径
- Windows OCR推荐
- keras中sample_weight的使用
- RecyclerView侧滑删除
- 机器学习笔记(通俗易懂)---监督学习介绍:分类与回归,泛化~过拟合与欠拟合(2)
- 2020iPS细胞研究进展综述