View Code of Problem 2596

    #include <stdio.h>
    #include <string.h>
    #define max 1<<20
    int start,end;
	int pre[10005],dis[10005];
	int num;
     
    struct node{
    	int to,next,v;
    }T[20005];
     
    void add(int a,int b,int c)
    {
    	T[num].to=b;
    	T[num].v=c;
    	T[num].next=pre[a];
    	pre[a]=num++;
    }
    void wtf(int m,int n)
    {
		int vis[10005];
		int flag;
		memset(vis,0,sizeof(vis));
		
		int i;
		for(i=0;i<=m;i++)
			dis[i]=max;
		int min;
		for(i=0;i<m;i++)
			dis[i]=max;
		vis[start]=1;
		for(i=pre[start];i!=-1;i=T[i].next )
		dis[T[i].to ]=T[i].v ;
		
		flag=start;
		while(1)
		{
			min=max;
			if(flag==end)
				break;
			for(i=0;i<m;i++)
			{
			if(!vis[i]&&dis[i]<min)
				{
    				min=dis[i];
    				flag=i;
    			}
			}
    		if(min==max) 
				break;
			vis[flag]=1;
			for(int i=pre[flag];i!=-1;i=T[i].next)
    		{
    			int y=T[i].to;
     			if(!vis[y])
    				dis[y]=((dis[flag]+T[i].v)<dis[y])?(dis[flag]+T[i].v):(dis[y]);
    		}


		
		}

	}
     
    int main()
    {
		int m,n,t;
    	while(scanf("%d%d%d",&m,&n,&t)!=EOF)
    	{
    		num=0;
    		memset(pre,-1,sizeof(pre));
    		scanf("%d%d",&start,&end);
    		for(int i=0;i<n;i++)
    		{
    			int a,b,c;
    			scanf("%d%d%d",&a,&b,&c);
    			add(a,b,c);
    			add(b,a,c);
    		}
    		wtf(m,n);
    		if(10*dis[end]<=t)
				printf("%d\n",dis[end]*10);
    		else printf("I am sorry,jlh!\n");
     
    	}
		return 0;

    }

Double click to view unformatted code.


Back to problem 2596