| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
诡异的很网上找了一个AC的程序,对下面这个测试数据
10
1 2
1 3
2 4
2 5
4 8
5 9
3 6
3 7
10 1
11 2
输出为 1 5
自己程序测了好多数据都没问题,这个应该是2 5吧,结果总是WA,哪位高人能帮忙看看啊
#include <stdio.h>
#include <stdlib.h>
char a[20010][20010];
int visit[20010];
int min = -1;
int n,minn;
void clear()
{
int i,j;
for(i=0;i<20010;i++)
{
visit[i] = -1;
}
//memset(a,0,sizeof(a));
min = -1;
minn = 0;
}
int dfs(int u)
{
int i,sum=0;
int tempmax=0;
visit[u] = 1;
for(i=1;i<=n;i++)
{
if(a[u][i] == 'Y' && visit[i] == -1)
{
int temp = dfs(i);
a[u][i] = a[i][u] = 'N';
sum = sum + temp;
if(temp > tempmax)
tempmax = temp;
}
}
int maxnow = tempmax > (n-1-sum) ? tempmax : (n-1-sum);
if(min == -1 || ( min > maxnow || ( min == maxnow && u < minn )))
{
min = maxnow;
minn = u;
}
return sum+1;
}
int main(void)
{
int cases;
scanf("%d",&cases);
int i;
for(i=0;i<cases;i++)
{
clear();
int lines;
scanf("%d",&lines);
int j,k;
n=1;
for(j=0;j<lines;j++)
{
int v,u;
scanf("%d %d",&v,&u);
int tmpn = v > u ? v : u;
if(n<tmpn)
n = tmpn;
a[v][u] = a[u][v] = 'Y';
}
for(j=1;j<=n;j++)
for(k=j+1;k<=n;k++)
if( a[j][k] == 'Y' )
break;
dfs(1);
printf("%d %d\n",minn,min);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator