讨论 / Mato完整版学体育:第5点wa4486
Lemontree 2010-05-26 22:14:00
点我顶贴 收藏 删除
第5点wa结果4486,为什么和别人不同?

#include<stdio.h>

#include<stdlib.h>

#define Max 7000000000//2140000000

#define la 100010

struct link { long int nod ,next; __int64 cost; };

struct link map[100020];

__int64 dis[100020];

long int t[100020];

char sub[100020];

void spfa(long int from,long int nod);

int main()

{//freopen("ans2.txt","w",stdout);

long int m,n,i,last,a,b;

__int64 c,limit,total;

scanf("%ld%ld%I64d",&n,&m,&limit);

for(i=0;i<=n;i++)

{

map[i].nod=i;

map[i].cost=Max;

map[i].next=0;

}

for(i=1,last=n+1;i<=m;i++)

{

scanf("%ld%ld%I64d",&a,&b,&c);

map[last].nod=b;

map[last].cost=c;

map[last].next=map[a].next;

map[a].next=last;

last++;

map[last].nod=a;

map[last].cost=c;

map[last].next=map[b].next;

map[b].next=last;

last++;

}

spfa(1,n);

for(i=1,total=0;i<=n;i++)

{

total+=dis[i];

}

total*=2;

//if( total == 4486){ printf("160132265414\n");printf("escape"); return 0;}

printf("%I64d\n",total);

if(total<=limit)printf("run");

else printf("escape");

//for(i=1;i<=n;i++)printf("%d ",dis[i]);

system("pause");

return 0;

}

void spfa(long int from,long int nod)

{

long int i,now,head=0,tail=1;

__int64 temp;

for(i=1;i<=nod;i++)

{

sub[i]=0;

dis[i]=Max;

}

sub[from]++;

dis[from]=0;

t[head]=from;

while(head!=tail)

{

now=t[head]; sub[now]--;

head++; head%=la;

for(i=map[now].next;i!=0;i=map[i].next)

{

temp= dis[now]+ map[i].cost;

if(temp< dis[ map[i].nod] )

{

dis[ map[i].nod]=temp;

if( sub[ map[i].nod]==0)

{

t[tail]=map[i].nod;

tail++; tail%=la;

sub[map[i].nod]++;

}

}

}

}

}//160132265414

查看更多回复
提交回复