sgu 286. Ancient decoration(最小环覆盖)
给你一个n个点,每个点度为k(k为偶数)的无向图,问是否能将图中的n条边染色,使得每个点都拥有两条被染色的边。也就是说,是否存在拥有原图中n条边的子图,使得每个点的度为2?仔细想想,每个点的度为2,实际上就是求原图的最小环覆盖了。
求最小环覆盖的方法就是先求出原图的有向欧拉回路(k为偶数,欧拉回路必然存在),然后问题就转化成了是否能选择欧拉回路中的n条边,使得所有点都被覆盖?这不就转化成了DAG的最小路径覆盖了么!
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cstdlib>
- #include<fstream>
- #include<sstream>
- #include<bitset>
- #include<vector>
- #include<string>
- #include<cstdio>
- #include<cmath>
- #include<stack>
- #include<queue>
- #include<stack>
- #include<map>
- #include<set>
- #define FF(i, a, b) for(int i=a; i<b; i++)
- #define FD(i, a, b) for(int i=a; i>=b; i--)
- #define REP(i, n) for(int i=0; i<n; i++)
- #define CLR(a, b) memset(a, b, sizeof(a))
- #define debug puts("**debug**")
- #define LL long long
- #define PB push_back
- using namespace std;
- const int maxn = 1001;
- int g[maxn][maxn], degree[maxn], match[maxn], id[maxn][maxn];
- bool vis[maxn];
- int n, k, u, v;
- void Euler()
- {
- FF(i, 1, n+1) if(degree[i])
- {
- int u = i;
- while(true)
- {
- FF(j, 1, n+1) if(g[u][j] && g[j][u])
- {
- g[j][u] = 0;
- degree[u]--, degree[i]--;
- u = j;
- break;
- }
- if(u == i) break;
- }
- }
- }
- bool dfs(int u)
- {
- FF(i, 1, n+1) if(!vis[i] && g[u][i])
- {
- vis[i] = true;
- if(match[i] == 0 || dfs(match[i]))
- {
- match[i] = u;
- return true;
- }
- }
- return false;
- }
- bool max_match()
- {
- CLR(match, 0);
- FF(i, 1, n+1)
- {
- CLR(vis, 0);
- if(!dfs(i)) return false;
- }
- return true;
- }
- int main()
- {
- while(~scanf("%d%d", &n, &k))
- {
- CLR(degree, 0);CLR(g, 0);
- REP(i, n*k/2)
- {
- scanf("%d%d", &u, &v);
- g[u][v] = g[v][u] = 1;
- id[u][v] = id[v][u] = i+1;
- degree[u]++, degree[v]++;
- }
- Euler();
- if(max_match())
- {
- puts("YES");
- FF(i, 1, n+1) printf("%d\n", id[match[i]][i]);
- }
- else puts("NO");
- }
- return 0;
- }
sgu 286. Ancient decoration(最小环覆盖)的更多相关文章
- SGU 280.Trade centers(贪心)
SGU 280.Trade centers 解题报告 题意: n(<=30000)个城市,(n-1)条道路,求最少需要选择多少个城市建造市场,使得所有城市到任意一个市场的距离不大于k. Solu ...
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...
- Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599
//Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- Oracle数据库验证IMP导入元数据是否会覆盖历史表数据
场景:imp导入数据时,最终触发器报错退出,并未导入存储过程.触发器.函数. 现在exp单独导出元数据,然后imp导入元数据,验证是否会影响已导入的表数据. 测试环境:CentOS 6.7 + Ora ...
- java继承覆盖与向上转型,权限
子类可以覆盖父类的非final成员变量和重写非final方法 private私有变量和方法只能在类的内部使用,因此子类继承的同时会被隐藏,相当于不继承 protected变量,子类可以继承调用 方法被 ...
- 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题
精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行) 如何利用给定的矩阵求出相应的行的集合 ...
- POJ 2125 Destroying the Graph 二分图最小点权覆盖
Destroying The Graph Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8198 Accepted: 2 ...
- bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法
筒子们在使用bootstrap的日期控件(datepicker , 现在官网提供的名称叫 datetimepicker)时可能会遇到如上图的问题这是啥原因造成的呢? 答案很简单时输出的优先级造成的(z ...
随机推荐
- Marshal UTF8 Strings in .NET
原文:Marshal UTF8 Strings in .NET Marshal UTF8 Strings in .NET Wow, what a pain in the butt. .NET stri ...
- .NET Page页面事件执行顺序,以及其作用(OnPreInit()、OnInit()等)
以按钮事件为测试标准 1. OnPreInit //检查 IsPostBack 属性来确定是不是第一次处理该页. //创建或重新创建动态控件. //动态设置主控页. //动态设置 Theme 属性. ...
- C#数学运算表达式解释器
C#数学运算表达式解释器 測试文件内容: a=2+3*2; b=2*(2+3); 浏览按钮事件处理程序: private void button_browse_Click(object sender, ...
- javascript(五)验证
<input id="domo" type="text"> <script> function my_function(){ var ...
- gcc和g++的区别【转自中国源码网】
gcc和g++的区别[转自中国源码网] gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是 ...
- WiPlug_百度百科
WiPlug_百度百科 WiPlug
- 指尖上的电商---(3)Solr全文搜索引擎的配置
接上篇,Solr的准备工作完毕后,本节主要介绍Solr的安装,事实上Solr不须要安装.直接下载就能够了 1.Solr配置 下载地址 :http://lucene.apache.org/so ...
- UVA 534 - Frogger(kruskal扩展)
UVA 534 - Frogger 题目链接 题意:给定一些点.如今要求一条路径从第一个点能跳到第二个点,而且这个路径上的最大距离是最小的 思路:利用kruskal算法,每次加最小权值的边进去,推断一 ...
- Keywords Search (ac 自己主动机)
Keywords Search Problem Description In the modern time, Search engine came into the life of everybod ...
- VCL改变主窗体的方法
使用如下语句即可Pointer((@Application.MainForm)^) := Form1; 仔细想想和Pointer((Application.MainForm)) := Form1;有什 ...