USACO3.31Riding the Fences(输出欧拉路径)

都忘了欧拉路径是什么了。。

用dfs搜 标记边  刚开始直接从I-N搜 直接超时 2了 先找符合起点和终点的点搜 即度数是奇数

d单dfs也超了 后来换了个姿势。。

 1 /*

 2     ID: shangca2

 3     LANG: C++

 4     TASK: fence

 5  */

 6 #include <iostream>

 7 #include<cstdio>

 8 #include<cstring>

 9 #include<algorithm>

10 #include<stdlib.h>

11 using namespace std;

12 int w[510][510],n,p[2010],flag,m,de[510],t;

13 void dfs(int u,int d)

14 {

15     for(int v = 1; v <= m ; v++)

16     {

17         if(w[u][v])

18         {

19             w[u][v]--;

20             w[v][u]--;

21             dfs(v,d+1);

22         }

23     }

24     p[t++] = u;

25     return ;

26 }

27 int main()

28 {

29     freopen("fence.in","r",stdin);

30     freopen("fence.out","w",stdout);

31     int i,u,v,st;

32     cin>>n;

33     m = 0;

34     for(i= 1; i <= n ; i++)

35     {

36         scanf("%d%d",&u,&v);

37         m = max(m,max(u,v));

38         de[u]++;

39         de[v]++;

40         w[u][v]++;

41         w[v][u]++;

42     }

43     int f = 1;

44     for(i = 1; i <= m ; i++)

45     {

46         if(de[i]%2!=0)

47         {

48             st = i;

49             break;

50         }

51         if(f&&de[i])

52         {

53             f = 0;

54             st = i;

55         }

56     }

57     dfs(st,1);

58     for(i = t-1; i >= 0 ; i--)

59     printf("%d\n",p[i]);

60     return 0;

61 }
View Code

 

你可能感兴趣的:(USACO)