hdu 5348 搜索
来源:互联网 发布:访客网络限速多少合适 编辑:程序博客网 时间:2024/05/05 15:01
#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cmath>#include <cstring>#include <stack>#include <set>#include <map>#include <vector>using namespace std;#define INF 0x2fffffff#define LL long long#define MAX(a,b) ((a)>(b))?(a):(b)#define MIN(a,b) ((a)<(b))?(a):(b)struct edge{ int x,y,n,f;}; edge es[600015];int head[100005];int ans[600005];int d[100005];int vis[100005];int cnt = 0;void add(int x,int y){ es[cnt].x = x; es[cnt].y = y; es[cnt].n = head[x]; es[es[cnt].n].f = cnt; es[cnt].f = -1; head[x] = cnt++;}void euler(int u){ while(head[u]!=-1){ int v = head[u]; if(v&1) ans[v^1] = 0; else ans[v] = 1; head[u] = es[v].n; if(es[v].n!=-1){ es[es[v].n].f = es[v].f; } if(es[v^1].f == -1) head[es[v].y] = es[v^1].n; else es[es[v^1].f].n = es[v^1].n; if(es[v^1].n != -1){ es[es[v^1].n].f = es[v^1].f; } d[es[v].y] --; d[es[v].x] --; u = es[v].y; }}int main(){ int t; cin >> t; while(t--){ int n,m; scanf("%d%d",&n,&m); cnt = 0; for(int i = 0;i <= n;i++){ head[i] = -1; d[i] = 0; } for(int i = 0;i < m;i++){ int x,y; scanf("%d%d",&x,&y); d[x]++; d[y]++; add(x,y); add(y,x); } for(int i = 1;i <= n;i++){ if(d[i]&1){ euler(i); } } for(int i = 1;i <= n;i++){ if(d[i] > 0){ euler(i); } } for(int t = 0;t < m;t++){ int i = t<<1; printf("%d\n",ans[i]); } } return 0;}
从奇度数点开始搜,肯定会终结于一个奇度数的点,这样就可以找到一条路,但是同时要记得删边,这样才能达到O(n+m)的复杂度
0 0
- hdu 5348 搜索
- hdu搜索
- hdu搜索
- *HDU 5348 - MZL's endless loop(搜索)
- HDU 1704 (搜索题)
- HDU 4016 搜索
- HDU 1181 搜索
- HDU-1128 暴力搜索
- 搜索 hdu 1238
- hdu 3786 搜索
- HDU 1430 魔板 搜索
- HDU-1548(BFS搜索)
- 搜索hdu 1240
- HDU 4536 状态搜索
- hdu 2141 二分搜索
- hdu 1429搜索
- hdu 搜索专题
- HDU 2531 搜索
- hdoj 4607 Park Visit 【树的直径的应用 求一棵树中经过k个点需要走的最短距离】
- 【DP_树形DP专辑小结】
- 我的第一个UI程序
- Java的访问权限详解(3+1)public private protected default
- Seeding【dfs】
- hdu 5348 搜索
- C++类的对象和类的指针的区别、指针和引用的区别
- OA系统如何控制每个人的权限?
- 递归 Lotto
- UVA 10131 Is Bigger Smarter?
- android sdk开发国内下下载地址,超全。。。
- UI04_UISwitch
- 派生map 使之变成 multimap
- 用户对OA实施的一些认识误区