zoukankan      html  css  js  c++  java
  • 【POJ3268】Silver Cow Party 最短

    意甲冠军:一群奶牛去的地方。去回,然后回去寻找最伟大值。

    题解:两遍最短路,结束。邻接矩阵存边能够避免建反图。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N  1005
    #define inf 0x3f3f3f3f
    using namespace std;
    
    int map[N][N],n,m,s;
    int dist1[N],dist2[N];
    bool visit[N];
    void dij1()
    {
    	memset(dist1,0x3f,sizeof(dist1));
    	memset(visit,0,sizeof(visit));
    	int i,u,v,temp,round;
    	dist1[s]=0;
    	for(round=1;round<n;round++)
    	{
    		temp=inf;
    		for(i=1;i<=n;i++)
    		{
    			if(!visit[i]&&temp>dist1[i])
    			{
    				temp=dist1[i];
    				u=i;
    			}
    		}
    		visit[u]=1;
    		for(v=1;v<=n;v++)
    		{
    			dist1[v]=min(dist1[v],dist1[u]+map[u][v]);
    		}
    	}
    	return ;
    }
    void dij2()
    {
    	memset(dist2,0x3f,sizeof(dist2));
    	memset(visit,0,sizeof(visit));
    	int i,u,v,temp,round;
    	dist2[s]=0;
    	for(round=1;round<n;round++)
    	{
    		temp=inf;
    		for(i=1;i<=n;i++)
    		{
    			if(!visit[i]&&temp>dist2[i])
    			{
    				temp=dist2[i];
    				u=i;
    			}
    		}
    		visit[u]=1;
    		for(v=1;v<=n;v++)
    		{
    			dist2[v]=min(dist2[v],dist2[u]+map[v][u]);
    		}
    	}
    	return ;
    }
    
    int main()
    {
    //	freopen("test.in","r",stdin);
    	int i,a,b,c;
    	scanf("%d%d%d",&n,&m,&s);
    	memset(map,0x3f,sizeof(map));
    	for(i=1;i<=m;i++)
    	{
    		scanf("%d%d%d",&a,&b,&c);
    		map[a][b]=c;
    	}
    	dij1();
    	dij2();
    	int ans=0;
    	for(i=1;i<=n;i++)ans=max(ans,dist1[i]+dist2[i]);
    	printf("%d
    ",ans);
    	return 0;
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Python爬取数据(基础,从0开始)
    个人作业——软件测评
    结对第二次作业
    结对第一次作业
    寒假作业(2/2)
    个人作业———软工实践课程总结
    Axios 介绍和使用
    软件评测
    结对第二次作业
    结对第一次——疫情统计可视化(原型设计)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4660890.html
Copyright © 2011-2022 走看看