prim10分求助
查看原帖
prim10分求助
105865
Jur_Cai楼主2020/7/30 23:02

第一天学最小生成树,dl老师一定要让我们用prim,查不出错了qwq

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#define INF 0x3f3f3f3f3f3f3f3fLL
#define P pair<long long,int>
using namespace std;
priority_queue<P,vector<P>,greater<P> > q;
bool vis[2005];
long long v[2005];
vector<P> g[2005];
int main() {
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1; i<=m; i++) {
		int a,b,l;
		scanf("%d%d%d",&a,&b,&l);
		g[a].push_back(P(b,l));
		g[b].push_back(P(a,l));
	}
	memset(v,INF,sizeof(v));
	v[1]=0;
	q.push(P(0,1));
	long long ans=0;
	int sum=0;
	while(!q.empty()&&sum<n) {
		int t=q.top().second;
		q.pop();
		if(!vis[t]) {
			vis[t]=1;
			sum++;
			ans=max(ans,v[t]);
			for(int i=0; i<g[t].size(); i++)
				if(v[g[t][i].first]>v[t]+g[t][i].second) {
					v[g[t][i].first]=v[t]+g[t][i].second;
					q.push(P(v[g[t][i].first],g[t][i].first));
				}
		}
	}
	printf("%lld",ans);
	return 0;
}
2020/7/30 23:02
加载中...