题目数据过弱,建议增加hack
查看原帖
题目数据过弱,建议增加hack
525038
leiwusi楼主2025/7/25 11:14

题目数据过弱 ,建议增加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;

}


2025/7/25 11:14
加载中...