晓天动漫

Coding yy life……

Timus 1040. Airline company

/*
 * File:   Timus 1040. Airline company
 * Author: xiaotian @ hnu
 * Created on 2010年10月2日, 上午9:34
 * 题解:一次找极长路(即两边不能再加边),将他们依次编号,然后删掉这些边。直至图中没有边为止。输出解即可。
 * 不会出现没有解的情况。
 */

 1 #include <iostream>
 2 #include<string.h>
 3 #include<iostream>
 4 #define N 55
 5 using namespace std;
 6 int n, m;
 7 int g[N][N];
 8 int link[N][N];
 9 int num[N*N];
10 int now;
11 bool vis[N];
12 bool p[N*N];
13 
14 void dfs(int x) {
15     for (int i = 1; i <= g[x][0]; ++i)
16         if (!p[link[x][i]]) {
17             p[link[x][i]] = true;
18             num[link[x][i]] = ++now;
19             if (!vis[g[x][i]]) {
20                 vis[g[x][i]] = true;
21                 dfs(g[x][i]);
22             }
23         }
24 }
25 
26 int main() {
27     while (scanf("%d %d"&n, &m) != EOF) {
28         memset(vis,0,sizeof(vis));
29         memset(p,0,sizeof(p));
30         now=0;
31         for (int i = 0; i <= n; i++) g[i][0= link[i][0= 0;
32         for (int i = 1; i <= m; ++i) {
33             int a, b;
34             scanf("%d %d"&a, &b);
35             g[a][++g[a][0]] = b;
36             g[b][++g[b][0]] = a;
37             link[a][++link[a][0]] = i;
38             link[b][++link[b][0]] = i;
39         }
40         vis[1= true;
41         dfs(1);
42         puts("YES");
43         for (int i = 1; i <= m; ++i) printf("%d ", num[i]);
44     }
45 }


posted on 2010-10-02 10:13 晓天_xiaotian 阅读(1024) 评论(0)  编辑 收藏 引用 所属分类: 搜索专版


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿

随笔分类

随笔档案

相册

收藏夹

ACM Online Judge

搜索

最新评论

阅读排行榜

评论排行榜