• 洛谷P1111


    题目

    思路

    利用Prim求该图的最小生成树,然后找到当中最大的那个数值输出,具体看代码吧,qwq。

    Code

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #define max_(a,b) a>b?a:b;
    using namespace std;
    const int inf=1061109567;
    int n,m;
    bool vis[5001];
    int map[5001][5001],dis[5001];
    inline int read(){
    	int x=0;
    	bool f=0;
    	char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    	return f?-x:x;
    }//读优
    void Prim(){
    	for(int i=1;i<=n;++i){
    		int k=0;
    		for(int j=1;j<=n;++j){
    			if(!vis[j]&&dis[j]<dis[k]) k=j;
    		}
    		vis[k]=1;
    		for(int j=1;j<=n;++j){
    			if(!vis[j]&&map[k][j]<dis[j]){
    				dis[j]=map[k][j];
    			}
    		}
    	}
    }//Prim
    
    int main(){
    	memset(map,0x3f3f3f,sizeof(map));
    	memset(dis,0x3f3f3f,sizeof(dis));
    	dis[1]=0;
    	n=read(),m=read();
    	int x,y,w;
    	for(int i=1;i<=m;++i){
    		x=read(),y=read(),w=read();
    		if(w<map[x][y]) map[x][y]=w,map[y][x]=w;
    	}
    	Prim();
    	int ans=0;
    	for(int i=1;i<=n;++i){
    		if(dis[i]==inf){//证明该图不连通
    			printf("-1
    ");
    			return 0;
    		}else ans=max_(ans,dis[i]);
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    day 1 认识js
    day2,request对象
    day3
    day 14 函数的嵌套,作用域
    命名空间(名称空间)
    day 13 函数
    day 11(2) 集合
    day 11 字典拆包
    字典
    两周英语函数(记)
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/11080683.html
Copyright © 2020-2023  润新知