求助大佬,wa了8个点,怎么检查都出不来
查看原帖
求助大佬,wa了8个点,怎么检查都出不来
363495
我爱杨帆楼主2020/8/15 09:53
#include<bits/stdc++.h>
using namespace std;
struct node
{
	long long v;
	long long id;
	bool operator<(const node &X) const
	{
		return v>X.v;
	}
};
struct node1
{
	long long vv;
	long long hp;
};
priority_queue<node> q;
vector<node1> a[10005];
long long dis[10005],w[10005],maxn=-1;
bool vis[10005];
long long n,m,b,ai,bi,ci;
int check(long long x)
{   
    if(w[1]>x) 
	return 0;
    for(long long i=1;i<=n;i++)
     {
	 dis[i]=1e18;
     vis[i]=0;
	 }
	 dis[1]=0;
	 q.push((node){0,1});
   while(!q.empty())
   {
   	node t=q.top();
   	q.pop();
   	long long  now=t.id,d=dis[now];
   	if(vis[now]) continue; 
   	vis[now]=1;
	for(long long  i=0;i<a[now].size();i++)
	 {
	   if(vis[a[now][i].vv]) continue;
	   if(w[a[now][i].vv]>x) continue;	
	   if(dis[a[now][i].vv]>dis[now]+a[now][i].hp)	
	 	{
		 dis[a[now][i].vv]=dis[now]+a[now][i].hp;
	     q.push((node){dis[a[now][i].vv],a[now][i].vv});
		}
	   if(a[now][i].vv==n)
	   {
	   	if(dis[n]>=b)
	   	{
		return 0;
		}
	   	else return 1;
	   }	
	 }    
   }	
   return 0;		
}
int main()
{  
   cin>>n>>m>>b;
   for(long long i=1;i<=n;i++)
   {
   cin>>w[i];
   maxn=max(maxn,w[i]);
   }
   sort(w+1,w+1+n);
   for(long long i=1;i<=m;i++)
   {
   	cin>>ai>>bi>>ci;
   	a[ai].push_back((node1){bi,ci});
   	a[bi].push_back((node1){ai,ci});
   }
   for(long long i=1;i<=n;i++)
   dis[i]=1e11;
   dis[1]=0; 
   long long l=1,r=maxn,ans=-1;
   while(l<=r)
   {
   	long long mid=(l+r)/2;
   	if(check(mid))
   	ans=mid,r=mid-1;
   	else 
   	l=mid+1;
   }
   if(ans==-1)
   cout<<"AFK";
   else 
   cout<<ans;
}
2020/8/15 09:53
加载中...