zoukankan      html  css  js  c++  java
  • pku 3268 Silver Cow Party

    嘿嘿,跟pku 1151 差不多,都是单源最短路,这次求的是每个点往返最短时间中的最大值,就是先按pku1151一样,求往返俩次的最短路,再求出最大值即可

    代码基本没怎么改

    #include <iostream>
    #include<string>
    #include<stdlib.h>
    using namespace std;
    const int MAX = 1010;
    const int inf = INT_MAX;
    int N,m,n,num,s;
    typedef struct vol
    {
    	int w,//当前位置
    		v,//价值 value
    		next;//下一结点的位置
    } Voll;
    Voll peo[MAX*200];
    bool vis[MAX];
    int start1[MAX], start2[MAX];
    int stack[MAX];  
    int dis1[MAX],dis2[MAX];   // dis[i] 从1即到i当前最短路
    void SPFA( int startt[],int dis[])
    {
    
    	int i,top=0,temp;
    	temp = s;
    	for(i=0;i<n+1;i++)
    	{
    		dis[i] = inf;
    	}
    	memset(vis,false,sizeof(vis));
    	dis[temp] = 0;
    	stack[++top] = temp;
    	vis[temp]=true;
    	while(top)
    	{
    		temp =stack[top--];vis[temp]=false;
    		for(i=startt[temp]; i!=-1; i=peo[i].next)
    		{
    			if(peo[i].v + dis[temp] < dis[peo[i].w])
    			{
    				dis[peo[i].w] = peo[i].v + dis[temp];
    				if(!vis[peo[i].w])
    				{
    					vis[peo[i].w]=true;
    				 stack[++top] = peo[i].w;
    				}
    			}
    		}
    	}
    }
    
    void init()
    {
    	int i,x,y,v;
    	num=0;
        memset(start1,-1,sizeof(start1));
    	memset(start2,-1,sizeof(start2));
    	for(i=0;i<m;i++)
    	{
    		scanf("%d %d %d",&x,&y,&v);
    		peo[num].w = y;
    		peo[num].v = v;
    		peo[num].next = start1[x];   //保存邻接表串的始端位置,逆向实现相当给力!!!
    		start1[x] = num++;			   
    		///反向
    		peo[num].w = x;
    		peo[num].v = v;
    		peo[num].next = start2[y];
    		start2[y] = num++;
    	}
    }
    int main()
    {
    	while(	scanf("%d %d %d", &n, &m,&s)==3)
    	{
    		init();	
    		SPFA(start1,dis1) ;
    		SPFA(start2,dis2);
    		int max1=-inf;
    		for(int i=1;i<n+1;i++)
    		{
    			if(dis1[i]+dis2[i]>max1)
    				max1=dis1[i]+dis2[i];
    		}
    		cout<<max1<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    将make的输出重定向到文件
    ubuntu mount u盘以及cp拷贝文件夹
    Emacs Tutorial摘录
    c#实现每隔一段时间执行代码(多线程)
    socket.BeginReceiveFrom异步接收信息时,回调函数无法正常进入
    23个C#实用技巧
    C#中实现Form的透明属性变化即渐隐效果
    C#键位定制:设置一个文本框只能输入数字键
    byte 与 bit 的转换
    C# Socket UDP 案例 2
  • 原文地址:https://www.cnblogs.com/nanke/p/2138632.html
Copyright © 2011-2022 走看看