URAL 1040 Airline Company
2012-05-04 14:34
204 查看
原来URAL中tricky problem都是这么得微妙……
直接将原图遍历,然后按遍历的时间将边标号即可,对于任意一个点,如果有至少两条边和其相连,那么至少有两条边的访问顺序是连续的,那么由于相邻的两个数的最大公约数是1,于是这样遍历一定能够得到解。
直接将原图遍历,然后按遍历的时间将边标号即可,对于任意一个点,如果有至少两条边和其相连,那么至少有两条边的访问顺序是连续的,那么由于相邻的两个数的最大公约数是1,于是这样遍历一定能够得到解。
#include<stdio.h> #include<string.h> #define MAXD 60 #define MAXM 2510 int N, M, e, first[MAXD], next[MAXM], v[MAXM], flag[MAXM], cnt; void add(int x, int y) { v[e] = y, flag[e] = 0; next[e] = first[x], first[x] = e ++; } void init() { int i, x, y; e = 0; memset(first, -1, sizeof(first)); for(i = 0; i < M; i ++) { scanf("%d%d", &x, &y); add(x, y), add(y, x); } } void dfs(int cur) { int i; for(i = first[cur]; i != -1; i = next[i]) if(!flag[i]) { flag[i] = flag[i ^ 1] = ++ cnt; dfs(v[i]); } } void solve() { int i, j, k; cnt = 0; for(i = 1; i <= N; i ++) dfs(i); printf("YES\n"); printf("%d", flag[0]); for(i = 1; i < M; i ++) printf(" %d", flag[i << 1]); printf("\n"); } int main() { while(scanf("%d%d", &N, &M) == 2) { init(); solve(); } return 0; }
相关文章推荐
- URAL1040 - Airline Company - dfs+思维
- URAL 1040: Airline Company
- Ural 1040 Airline Company(构造)
- URAL 1040 Airline Company 构造,思路 难度:2
- URAL 1040
- Ural1040
- hiho1040 矩形判断
- URAL 2019 Pair: normal and paranormal
- URAL - 2015 Zhenya moves from the dormitory
- URAL 1004 Sightseeing Trip 无向图最小环
- URAL - 1889 E - Airport Announcements (好好读题!!!)
- Ural 1152 False Mirrors(状压DP)
- 1040. 有几个PAT(25)
- URAL 1614. National Project “Trams” (图论大YY)
- ural 1022. Genealogical Tree 拓扑排序
- ural 1880. Psych Up's Eigenvalues 贪心
- PAT乙级 1040. 有几个PAT(25)
- 【BZOJ】1040 [ZJOI2008]骑士 树形DP
- URAL 1542. Autocompletion 字典树
- PAT乙级 1040. 有几个PAT(25)--数学问题