Description
Each of the M lanes of the Park of Polytechnic University of Bucharest connects two of the N crossroads of the park (labeled from 1 to N). There is no pair of crossroads connected by more than one lane and it is possible to pass from each crossroad to each other crossroad by a path composed of one or more lanes. A cycle of lanes is simple when passes through each of its crossroads exactly once.Input
On the first line of the input file the number T of the test cases will be given. Each test case starts with a line with the positive integers N and M, separated by interval (4 <= N <= 4444). Each of the next M lines of the test case contains the labels of one of the pairs of crossroads connected by a lane.Output
For each of the test cases, on a single line of the output, print the length of a maximal simple cycle.Sample Input
1 7 8 3 4 1 4 1 3 7 1 2 7 7 5 5 6 6 2
Sample Output
4
Source
Southeastern European Regional Programming Contest 2009求一個無向圖裡的最大環,額,開始用的鄰連接矩陣,超內存了無數次,
只能轉向鄰接表啦=。=,話說我比賽的時候wa了4發,不能再愛了。順便學了鄰接表。
#include#include #include #include #include using namespace std; const int maxn=4500; struct node{ int to,next; }e[maxn<<2]; int f[maxn]; int head[maxn]; int n,m,num; int ans; void build(int u,int v) { e[num].to=v; e[num].next=head[u]; head[u]=num; num++; } void dfs(int cur,int pos) { if(f[cur]) { if(ans
最後附上我超內存的代碼=。=引以為戒#include#include #include #include #include using namespace std; const int maxn=5000; int visit[maxn][maxn]; int mp[maxn][maxn]; int n,m,sum; bool flag; void dfs(int k,int s,int p) { if(k==p&&s) { if(s>sum) sum=s; flag=true; } if(k==p&&s<=sum&&s) { flag=true; return ; } if(flag) return ; for(int i=1;i<=n;i++) { if(mp[k][i]&&!visit[k][i]) { visit[k][i]=visit[i][k]=1; dfs(i,s+1,p); visit[k][i]=visit[i][k]=0; } } } int main() { int t,u,v; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(mp,0,sizeof(mp)); for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); mp[u][v]=mp[v][u]=1; } sum=0; for(int i=1;i<=n;i++) { memset(visit,0,sizeof(visit)); flag=false; dfs(i,0,i); } printf("%d\n",sum); } return 0; }