为什么WA on #5 #8 #11 #12
查看原帖
为什么WA on #5 #8 #11 #12
1213719
Algorithm_king楼主2025/2/7 20:20
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10010,M=50010;
struct inf{
	int a,b,c;
}t[M];
struct edge{
	int v,w;
};
vector<edge>e[N][35];
int n,m,b,cnt,l,r,f[N];
ll d[N];
bool vis[N];
ll dijkstra()
{
	priority_queue<pair<int,int>>q;
	for(int i=1;i<=n;i++) d[i]=1e18,vis[i]=0;
	d[1]=0;
	q.push({0,1});
	while(q.size())
		{
			auto t=q.top();
			q.pop();
			int u=t.second;
			if(vis[u]) continue;
			vis[u]=1;
			for(auto ed:e[u][cnt])
				{
					int v=ed.v,w=ed.w;
					if(d[v]>d[u]+w)
						{
							d[v]=d[u]+w;
							q.push({-d[v],v});
						}
				}
		}
	return d[n];
}
int main()
{
	cin>>n>>m>>b;
	for(int i=1;i<=n;i++) 
		{
			cin>>f[i];
			r=max(r,f[i]);
		}
	l=max(f[1],f[n]);
	for(int i=1;i<=m;i++) 
		{
			cin>>t[i].a>>t[i].b>>t[i].c;
			e[t[i].a][0].push_back({t[i].b,t[i].c});
			e[t[i].b][0].push_back({t[i].a,t[i].c});
		}
	if(dijkstra()>b)
		{
			cout<<"AFK";
			return 0;
		}
	while(l<r)
		{
			cnt++;
			int mid=l+r>>1;
			for(int i=1;i<=m;i++)	
				{
					e[t[i].a][cnt].push_back({t[i].b,t[i].c});
					e[t[i].b][cnt].push_back({t[i].a,t[i].c});
				}
			if(dijkstra()<=b) r=mid;
			else l=mid+1;
		}
	cout<<l;
	return 0;
}
2025/2/7 20:20
加载中...