题目数据过弱 ,建议增加hack
(可能是生成数据的时候正好都是顺序生成的)(?)
原因:我把dijkstra堆优化的优先队列开成了普通队列,居然有90分 !!评测记录
queue<nod> q;
错误代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e4+114;
const int inf = LONG_MAX-10;
// const int MAXM = 5e4+114;
vector<pair<int,int> > G[MAXN];
int dis[MAXN],vis[MAXN];
struct nod{
int v,d;
};
bool operator<(const nod &a,const nod &b){
return a.d>b.d;
}
queue<nod> q;
int n,m,b,f[MAXN];
int dij(int x,int y,int m){
for(int i = 1;i<=n;i++) dis[i] = inf;
memset(vis,0,sizeof(vis));
while(!q.empty()) q.pop();
vis[x] = 1;
dis[x] = 0;
q.push({x,0});
while(!q.empty()){
auto k = q.front();
int u = k.v;
q.pop();
vis[u] = 1;
for(auto i:G[u]){
int v = i.first,w = i.second;
if(!vis[v]){
if(f[v] > m) continue;
if(dis[v]>dis[u]+w) { dis[v] = dis[u]+w;q.push({v,dis[v]});}
}
}
}
return dis[y];
}
int a,d,c;
signed main(){
cin>>n>>m>>b;
int l = 0x3f3f3f3f,r = 0;
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 >> a>>d>>c;
G[a].push_back(make_pair(d,c));
G[d].push_back(make_pair(a,c));
}
int ans = inf;
while(l<=r){
int mid = (l+r)/2;
int ck = dij(1,n,mid);
if(ck > b) l = mid+1;
else {
r = mid-1;
}
}
if(dij(1,n,ans) > b || dij(1,n,ans) == inf) cout<<"AFK";
else cout<<l;
}