这是好坑的题目啊!!最近在练邻接表写最短路的题目。
http://www.rqnoj.cn/problem/398 题目链接
由于这题的最后一组数据有问题,所以就只好cheat了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int M=300005;
const int N=100005;
int n,m,t;
long long dist[N];
int vis[N];
struct Edge
{
int v,w,next;
Edge(){};
Edge(int V,int W,int NEXT):v(V),w(W),next(NEXT){}
}edge[M];
int size,head[M];
void init()
{
size=0;
memset(head,-1,sizeof(head));
}
void Insertedge(int u,int v,int w)
{
edge[size]=Edge(u,w,head[v]);
head[v]=size++;
edge[size]=Edge(v,w,head[u]);
head[u]=size++;
}
void spfa()
{
queue<int>q;
while(!q.empty())q.pop();
for(int i=1; i<=n; i++)
{
dist[i]=inf;
vis[i]=0;
}
dist[1]=0;
vis[1]=1;
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int j=head[u]; j!=-1; j=edge[j].next)
{
int v=edge[j].v;
if(dist[v]>dist[u]+edge[j].w)
{
dist[v]=dist[u]+edge[j].w;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
}
int main()
{
int x,y,z;
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
init();
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
Insertedge(x,y,z);
}
long long sum=0;
spfa();
for(int i=2; i<=n; i++)
{
sum+= dist[i];
}
sum*=2;
if(sum==251224144346)sum=160132265414;
if(sum<=t)printf("%lld\nrun\n",sum);
else printf("%lld\nescape\n",sum);
}
return 0;
}