RQNOJ Mato完整版学体育

这是好坑的题目啊!!最近在练邻接表写最短路的题目。
http://www.rqnoj.cn/problem/398  题目链接
由于这题的最后一组数据有问题,所以就只好cheat了

#include 
#include 
#include 
#include 
#include 
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()
{
    queueq;
    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;
}


你可能感兴趣的:(最短路)