10308 - Roads in the North

2014-11-24 00:40:31 · 作者: · 浏览: 8
[cpp]
描述:无根树题目,实际上就是找一条关键路也就是最长路,用dp做
#include
#include
#include
using namespace std;
typedef struct
{
int x,y;
} Pair;
vector v[10010];
int dp[10010],sum;
bool vis[10010];
void dfs(int cur)
{
int sec=0;
vis[cur]=1;
int len=v[cur].size();
dp[cur]=0;
for(int i=0; i {
int b=v[cur][i].x,c=v[cur][i].y;
if(!vis[b])
{
dfs(b);
if(dp[cur] {
sec=dp[cur];
dp[cur]=dp[b]+c;
}
else if(sec }
}
if(sum }
int main()
{
int flag=0,count=0;
//freopen("a.txt","r",stdin);
while(!count)
{
char s[1010];
flag=sum=0;
for(int i=0; i<=10000; ++i) v[i].clear();
while(1)
{
if(!gets(s))
{
count=1;
break;
}
if(!flag&&s[0]==0)
{
if(!gets(s)) count=1;
break;
}
if(flag&&s[0]==0) break;
flag=1;
int a,b,c;
sscanf(s,"%d%d%d",&a,&b,&c);
Pair p;
p.x=b,p.y=c;
v[a].push_back(p);
p.x=a;
v[b].push_back(p);
vis[a]=vis[b]=0;
}
dfs(1);
printf("%d\n",sum);
}
return 0;
}