prim pt44求调
查看原帖
prim pt44求调
469213
SugarKite楼主2023/10/20 19:59
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
int n,m,ans=0,cnt=0;
vector<PII>mp[50050];
int dis[50050],vis[50050];
priority_queue<PII,vector<PII>,greater<PII> >q;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		mp[x].push_back({z,y});
		mp[y].push_back({z,x});
	}
	for(int i=1;i<=n;i++){
		dis[i]=0x3f3f3f3f;
	}
	dis[1]=0;
	q.push({0,1});
	while(q.size()&&cnt<n){
		int id=q.top().second;
		int data=q.top().first;
		q.pop();
		if(vis[id])continue;
		vis[id]=1;
		cnt++;
		ans+=data;
		dis[id]=0;
		for(int i=0;i<mp[id].size();i++){
//			cout<<"try:"<<mp[id][i].second<<endl;
//			cout<<"test:"<<dis[mp[id][i].second]<<" "<<mp[id][i].first<<endl;
			if(dis[mp[id][i].second]>mp[id][i].first&&!vis[i]){
//				cout<<"push:"<<mp[id][i].first<<endl;
				dis[mp[id][i].second]=mp[id][i].first;
				q.push({dis[mp[id][i].second],mp[id][i].second});
			}
		}
	}
	cout<<cnt<<endl;
	if(cnt==n)cout<<ans<<endl;
	else cout<<"orz"<<endl;
	return 0;
} 
2023/10/20 19:59
加载中...