QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#721962#9431. The Quest for El DoradoAlasco#WA 76ms36544kbC++142.0kb2024-11-07 17:18:202024-11-07 17:18:21

Judging History

你现在查看的是最新测评结果

  • [2024-11-07 17:18:21]
  • 评测
  • 测评结果:WA
  • 用时:76ms
  • 内存:36544kb
  • [2024-11-07 17:18:20]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const ll inf=1e17;
int n,m,k,vis[500005];

struct dd{
    int to,f;
    ll dis;
};
struct rd{
    int f;
    ll dis;
}a[500005];
struct node{
    int id,f;
    ll dis;
    bool operator<(const node y)const{
        if(f!=y.f)return f>y.f;
        return dis>y.dis;
    }
}dist[500005];
vector<dd>e[500005];
vector<int>ind[500005];
void __(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        e[i].clear();
        ind[i].clear();
        dist[i]={0,m+1,inf};
        vis[i]=0;
    }
    for(int i=1;i<=m;i++){
        int u,v,c;
        ll l;
        cin>>u>>v>>c>>l;
        e[u].push_back({v,c,l});
        e[v].push_back({u,c,l});
    }
    for(int i=1;i<=k;i++){
        cin>>a[i].f>>a[i].dis;
        ind[a[i].f].push_back(i);
    }
    priority_queue<node>q;
    dist[1]={1,0,0};
    q.push(dist[1]);
    while(!q.empty()){
        int u=q.top().id,f=q.top().f,dis=q.top().dis;
        q.pop();
        if(vis[u])continue;
        vis[u]=1;
        // cout<<"U"<<u<<"\n";
        for(auto [v,ff,len]:e[u]){
            if(ff==a[f].f){
                // cout<<"A\n";
                if(dis+len>a[f].dis)continue;
                node tmp=node{v,f,len+dis};
                if(dist[v]<tmp){
                    dist[v]=tmp;
                    q.push(dist[v]);
                }
                continue;
            }
            // cout<<"B "<<v<<" "<<ff<<" "<<len<<"\n";
            auto it=lower_bound(ind[ff].begin(),ind[ff].end(),f);
            if(it==ind[ff].end())continue;
            int nex=(*it);
            node tmp=node{v,nex,len};
            // cout<<"C"<<v<<" "<<nex<<" "<<len<<"\n";
            if(dist[v]<tmp){
                dist[v]=tmp;
                q.push(dist[v]);
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<vis[i];
    }
    cout<<"\n";
}
int main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int _;cin>>_;while(_--)__();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 8ms
memory: 32436kb

input:

2
5 6 4
1 2 1 30
2 3 1 50
2 5 5 50
3 4 6 10
2 4 5 30
2 5 1 40
1 70
6 100
5 40
1 30
3 1 1
2 3 1 10
1 100

output:

11011
100

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 76ms
memory: 36544kb

input:

1110
46 80 30
44 23 5 46
10 28 1 64
32 34 3 40
9 36 1 26
15 14 5 95
38 19 2 34
2 17 4 183
10 38 2 81
5 15 2 83
31 38 3 100
40 30 1 53
41 10 1 193
29 20 5 18
14 41 3 78
8 16 5 74
46 13 3 78
44 28 3 45
1 40 3 133
5 32 1 108
22 26 2 83
10 38 1 77
11 40 1 11
17 21 2 66
41 46 3 98
9 36 2 25
40 18 1 19
27...

output:

1110110111110111111110111000111100111101101000
1000000010101001011011000000001000000100000000
1000000000000000000000000000000000000000000000
1000000000000000000000000010000000000000000000
1111111111111111111111111111111111111111111111
1001100010100000000101110000100001000100110
101011101000000000100...

result:

wrong answer 1st lines differ - expected: '1000110011110111110010100001010100100101000000', found: '1110110111110111111110111000111100111101101000'