【杂题】[POJ3222]Edge Pairing
2016-05-18 15:07
281 查看
AC链接
题目大意:给定一个nn个节点,mm条边的图。如果某两条边有公共顶点,则这两条边可以匹配。问是否存在一个匹配方案,使得所有的边都恰好被匹配一次。
数据范围:3≤n≤20000,2≤m≤100000,3≤n≤20000,2≤m≤100000,其中mm为偶数,且图联通。
跪膜大神fanhqme
膜拜链接
然而感觉就是xjbdfs…
在dfs搜索树上分治?(如果一定要强行加上什么算法的话…
在dfs到uu的时候,分以下几种情况:
1.邻接点vv的dfs树匹配满了,并返回-1。
2.单出来了一个节点vv,返回vv,与uu的父亲的某一个点进行匹配。
对于已经访问的节点v按第二种情况处理。
(然而感觉并木有说清楚的样子…
然而POJ上根本就木有输出“No“的数据,感觉是一定有解?!
题目大意:给定一个nn个节点,mm条边的图。如果某两条边有公共顶点,则这两条边可以匹配。问是否存在一个匹配方案,使得所有的边都恰好被匹配一次。
数据范围:3≤n≤20000,2≤m≤100000,3≤n≤20000,2≤m≤100000,其中mm为偶数,且图联通。
跪膜大神fanhqme
膜拜链接
然而感觉就是xjbdfs…
在dfs搜索树上分治?(如果一定要强行加上什么算法的话…
在dfs到uu的时候,分以下几种情况:
1.邻接点vv的dfs树匹配满了,并返回-1。
2.单出来了一个节点vv,返回vv,与uu的父亲的某一个点进行匹配。
对于已经访问的节点v按第二种情况处理。
(然而感觉并木有说清楚的样子…
然而POJ上根本就木有输出“No“的数据,感觉是一定有解?!
#include <iostream> #include <cstdio> #define MAXM 100005 #define MAXN 20005 using namespace std; struct node{int v, next;}edge[MAXM<<1]; int adj[MAXN], dfn[MAXN], tot, idx, out[MAXM][3], cnt; inline void add(int u,int v){edge[++tot].v=v, edge[tot].next=adj[u], adj[u]=tot;} int dfs(int u) { int ans=-1; dfn[u]=++idx; for(int p=adj[u], v, t;p;p=edge[p].next) if(!dfn[v=edge[p].v]) { t=dfs(v); if(t==-1) { if(~ans)out[++cnt][0]=ans, out[cnt][1]=u, out[cnt][2]=v, ans=-1; else ans=v; } else out[++cnt][0]=u, out[cnt][1]=v, out[cnt][2]=t; } else if(dfn[v]>dfn[u]) { if(ans==-1)ans=v; else out[++cnt][0]=ans, out[cnt][1]=u, out[cnt][2]=v, ans=-1; } return ans; } int main() { int n, m, u, v; scanf("%d%d",&n,&m); for(int i=1;i<=m;++i) { scanf("%d%d",&u,&v); add(u,v), add(v,u); } dfs(1); if(cnt)for(int i=1;i<=cnt;++i)printf("%d %d %d\n",out[i][0],out[i][1],out[i][2]); else puts("No"); return 0; }
相关文章推荐
- 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,reado
- 主题 : clang: error: linker command failed with exit code 1 (use -v to see invocation)
- LeetCode Climbing Stairs(经典动态规划)
- Makefile 没有规则创建目标“main.o”需要的目标“main.c”
- LeetCode 217. Contains Duplicate
- DailyNote
- Creating schema using Saiku Schema Designer
- Codeforces Round #353 (Div. 2) E. Trains and Statistic(求d[i][j]的和的最小值(1<=i<=n,i+1<=j<=n))
- SendKeys.SendWait()BUG解决方法
- Cookie未设置Domain
- Error:Failed to create directory 'C:\Users\Administrator\.gradle\caches\2.8\scripts\ijinit7_5jx13p26
- django错误 - Reason given for failure: CSRF cookie not set.
- 简单动态规划 climbing-stairs
- codeforces E. Trains and Statistic 线段树优化dp
- Execution failed for task ':dexDebug'
- poj2256人工智能?其实就是字符串处理啦
- 调用系统文件管理器选择图片,调用系统裁剪AIP对图片处理,显示裁剪之后的图片
- saltstack[5]-grains
- NeHe's Opengl 06:纹理映射 initialization failed和Unknown DIB file format
- 11. Container With Most Water