zoukankan      html  css  js  c++  java
  • POJ 1502

    题意 N个点 然后是一个N*N的矩阵 但是只有一半 其中说了mp[i][j]=mp[j][i] mp[i][i]=0 求从1号点到其他所有点用时的最少值
    思路 因为到每个点的时间是有先后的 所以我们只需要求出1到所有点的最短路 然后取最大即可

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<string.h>
    #include<queue>
    using namespace std;
    const int inf = 0x3f3f3f3f;
    const int maxn=105;
    int mp[maxn][maxn],vis[maxn],dis[maxn];
    int n,sum=0;
    string s;
    
    int DJ(int n)
    {
    	for(int i=1;i<=n;i++)
    	{
    		dis[i]=mp[1][i];
    	}
    	vis[1]=1;
    	for(int i=1;i<=n;i++)
    	{
    		int minn=inf;
    		int k=0;
    		for(int j=1;j<=n;j++)
    		{
    			if(!vis[j] && dis[j]<minn)
    			{
    				k=j;
    				minn=dis[j];
    			}
    		}
    		vis[k]=1;
    		for(int j=1;j<=n;j++)
    		{
    			if(!vis[j] && dis[j]>dis[k]+mp[k][j])
    			{
    				dis[j]=dis[k]+mp[k][j];
    			}
    		}
    	}
    	for(int i=1;i<=n;i++)
    	{
    		sum=max(sum,dis[i]);
    	}
    	return sum;
    }
    
    int value(string s)
    {
    	int len = s.length();
    	int ans=0;
    	for(int i=len-1,j=1;i>=0;i--,j*=10)
    	{
    		ans+=(s[i]-'0')*j;
    	}
    	return ans;
    }
    int main()
    {
    	memset(mp,inf,sizeof(mp));
    	memset(vis,0,sizeof(vis));
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=i;j++)
    		{
    			if(i==j) 
    			{
    				mp[i][j]=0;
    				continue;
    			}
    			cin>>s;
    			if(s!="x") mp[i][j]=mp[j][i]=value(s);
    			else mp[i][j]=mp[j][i]=inf;
    		}
    	}
    	cout<<DJ(n)<<endl;
    	return 0;
    }
    
  • 相关阅读:
    leetcode----------Pascal's Triangle II
    leetcode----------Pascal's Triangle
    leetcode----------Climbing Stairs
    leetcode----------Balanced Binary Tree
    HTML的DOM树结构
    记一记流水账
    多校训练4——Hehe
    深啾啾~亚马逊与天猫大比拼
    Photo4
    第一次用FontLad~
  • 原文地址:https://www.cnblogs.com/tianming1/p/13899028.html
Copyright © 2011-2022 走看看