zoukankan      html  css  js  c++  java
  • hdoj2066一个人的旅行

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

    Total Submission(s): 24946    Accepted Submission(s): 8675


    Problem Description
    尽管草儿是个路痴(就是在杭电待了一年多。竟然还会在校园里迷路的人。汗~),但是草儿仍然非常喜欢旅行。由于在旅途中 会遇见非常多人(白马王子。^0^),非常多事,还能丰富自己的阅历。还能够看漂亮的风景……草儿想去非常多地方,她想要去东京铁塔看夜景,去威尼斯看电影。去阳明山上看海芋。去纽约纯粹看雪景,去巴黎喝咖啡写信。去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假。但是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!由于草儿的家在一个小镇上。没有火车经过。所以她仅仅能去邻近的城市坐火车(好可怜啊~)。
     

    Input
    输入数据有多组。每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个。草儿想去的地方有D个;
    接着有T行,每行有三个整数a。b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
    接着的第T+1行有S个数,表示和草儿家相连的城市;
    接着的第T+2行有D个数。表示草儿想去地方。
     

    Output
    输出草儿能去某个喜欢的城市的最短时间。
     

    Sample Input
    6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
     

    Sample Output
    9
     

    出现了一个错误,数组开的太小了吃惊



    #include<stdio.h>
    #include<string.h>
    #include<queue>
    using namespace std;
    struct stu{
    	int one,two,val,next;
    };
    stu edge[300000];
    int N,M,d,f,D;
    int head[300000],t,vid[3000],dist[3000],x[10000],y[10000];//刚開始没这么么大
    void spfa(int s)
    {
         queue<int> Q;
    	 memset(dist,0x3f3f3f,sizeof(dist));
    	 memset(vid,0,sizeof(vid));
    	 Q.push(s);
    	 dist[s]=0;
    	 vid[s]=1;
    	 while(!Q.empty())
    	 {
    	   int	u=Q.front();
    	 	Q.pop();
    	 	vid[u]=0;
    	 	for(int i=head[u];i!=-1;i=edge[i].next)
    	 	{
    	 		int v=edge[i].two;
    	 		if(dist[v]>dist[u]+edge[i].val)
    	 		{
    	 			dist[v]=dist[u]+edge[i].val;
    	 			if(!vid[v])
    	 			{
    				 	vid[v]=1;
    	 				Q.push(v);
    	 			}
    	 		}
    	 	}
    	 }
    }
    void get(int a,int b,int c)
    {
    	stu E={a,b,c,head[a]};
    	edge[t]=E;
    	head[a]=t++;
    }
    int main()
    {
    	while(scanf("%d%d%d",&N,&M,&D)!=EOF)
    	{
    		t=0;
    		memset(head,-1,sizeof(head));
    		int a,b,c;
    		while(N--)
    		{
    			scanf("%d%d%d",&a,&b,&c);
    			get(a,b,c),get(b,a,c);
    		}
    		int g,min=1000000000; 
    		for(int i=0;i<M;i++)
    			scanf("%d",&x[i]);
    		for(int i=0;i<D;i++)
    		scanf("%d",&y[i]);
    		for(int i=0;i<M;i++)
    		for(int j=0;j<D;j++)
    		{
    			spfa(x[i]);
    			if(dist[y[j]]<min)
    			min=dist[y[j]];
    		}
    		printf("%d
    ",min);
    	}
    	return 0;
    }

  • 相关阅读:
    今日大跌!
    web servers
    ASP.NET2.0缓存机制
    赚钱的总是史玉柱?
    asp.net速查手册
    为伊消得人憔悴,我的2007成就难有,内心彷徨
    success
    失守4600点
    Linux下chkconfig命令详解
    FTP批处理下载木马
  • 原文地址:https://www.cnblogs.com/llguanli/p/7065898.html
Copyright © 2011-2022 走看看