求助大佬,判断不了是否联通,求查错!
查看原帖
求助大佬,判断不了是否联通,求查错!
363495
我爱杨帆楼主2020/8/14 11:27
#include<bits/stdc++.h>
using namespace std;
const int inf=214364;
struct node
{
	int v;
	int id;
	bool operator <(const node &x)const
	{
		return v>x.v;
	}
};
struct node1
{
  	int v1;
  	int w;
};
priority_queue<node> q;
vector<node1>a[inf];
int ans[inf];
bool b[inf];
int fin[inf];
int main()
{
   int n,m,s,uu,vv,ww;
   cin>>n>>m>>s;
   for(int i=1;i<=m;i++)
   {
   	cin>>uu>>vv>>ww;
   	a[uu].push_back((node1){vv,ww});
   }
   memset(ans,inf,sizeof(ans));
   ans[s]=0;
   q.push((node){0,s});
   while(!q.empty())
   {
   	node t=q.top();
   	q.pop();
   	int now=t.id;
   	int d=ans[t.id];
   	if(b[now]) 
   	continue;
   	b[now]=1;
   	for(int j=0;j<a[now].size();j++)
   	 { 
   	  if(b[a[now][j].v1]) continue;
   	  if(ans[a[now][j].v1]>d+a[now][j].w)
		{
		  ans[a[now][j].v1]=d+a[now][j].w;
	      q.push((node){ans[a[now][j].v1],a[now][j].v1});
		}
	 }
   } 
    long long p=pow(2,31)-1;
   for(int i=1;i<=n;i++)
    {
    if(ans[i]==inf) cout<<p<<" ";	
	else cout<<ans[i]<<" ";
    }
   return 0;
}
2020/8/14 11:27
加载中...