码迷,mamicode.com
首页 > 其他好文 > 详细

topcoder 650 srm div2 1000pts

时间:2015-02-19 20:42:55      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

(15)

      也是 DIV1 500

题意是给定 一个无向图 删去一条边以后 可不可以是完全二叉树。

细节点很多,开始做法居然求到桥去了,最近强联通写傻了。

最多1024-1个点 1024-1条边枚举

所以:

     先枚举要删去的边,然后进行判断。

判断是否是一颗完全二叉树的话 要一个标记deep深度 max deep==h

然后还要看是否整个图强联通

还有一点 点的度 为1 ,2 ,3 其中度为2的只有一个 ,度为1的有2^(h-2)个

code:

 1 #include<iostream>
 2 #include <string>
 3 #include <vector>
 4 #include<cmath>
 5 #include<map>
 6 #include<algorithm>
 7 #include<string.h>
 8 using namespace std;
 9 #define N 123456
10 
11 int head[N],dfn[N],low[N];
12 int vis[N];
13 int du[N];
14 struct edge
15 {
16     int v,next;
17 }e[N*10];
18 int cnt;
19 
20 int ans;
21 
22 void add(int u,int v)
23 {
24     e[cnt].v=v;
25     e[cnt].next=head[u];
26     head[u]=cnt++;
27 }
28 
29 
30 void dfs(int u,int t)
31 {
32     vis[u]=1;
33     t++;
34     ans=max(ans,t);
35     for (int i=head[u];i!=-1;i=e[i].next)
36     {
37         int v=e[i].v;
38         if (!vis[v])
39         {
40             dfs(v,t);
41         }
42     }
43 }
44 
45 void init()
46 {
47     cnt=0;
48     memset(head,-1,sizeof(head));
49     memset(dfn,0,sizeof(dfn));
50     memset(low,0,sizeof(low));
51     memset(vis,0,sizeof(vis));
52     memset(du,0,sizeof(du));
53     ans=0;
54 }
55 
56 class TheKingsRoadsDiv2 {
57     public:
58     string getAnswer(int h, vector <int> a, vector <int> b) {
59     int  k=1;
60     for (int i=1;i<=h;i++) k*=2;
61     k--;
62 
63     for (int p=0;p<a.size();p++)
64     {
65     init();
66     for (int j=0;j<a.size();j++)
67     if (j!=p)
68     {
69     add(a[j],b[j]),add(b[j],a[j]);
70     du[a[j]]++;
71     du[b[j]]++;
72     }
73 
74     int u=0;
75     int num=0;
76     int flag=0;
77     for (int i=1;i<=k;i++) {
78     if (du[i]==2) u=i;
79     else if (du[i]==1) num++;
80     else if (!(du[i]==1||du[i]==2||du[i]==3)) flag=1;
81     }
82 
83     if (!u||num!=(k+1)/2) continue;
84     dfs(u,0);
85     for (int i=1;i<=k;i++)
86     if (!vis[i]) flag=1;
87     if (flag||ans!=h) continue;
88     return "Correct";
89     }
90     return "Incorrect";
91    }
92 };
93 
94 
95 // Powered by FileEdit
96 // Powered by TZTester 1.01 [25-Feb-2003]
97 // Powered by CodeProcessor

 

topcoder 650 srm div2 1000pts

标签:

原文地址:http://www.cnblogs.com/forgot93/p/4296273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!