QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#784385#1774. Customs Controlsydzr00000WA 2ms10264kbC++172.8kb2024-11-26 14:51:422024-11-26 14:51:43

Judging History

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

  • [2024-11-26 14:51:43]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:10264kb
  • [2024-11-26 14:51:42]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
vector<int>e[100001],g[100001];
int a[100001];
struct vertex{
    int id;
    long long dis;
    friend inline bool operator<(const vertex &a,const vertex &b)
    {
        return a.dis>b.dis;
    }
};
priority_queue<vertex>Q;
vector<long long>dis[2];
bool vis[100001];
inline void Dijkstra(int s,vector<long long>&dis)
{
    memset(vis,0,sizeof(vis));
    fill(dis.begin(),dis.end(),1e12);
    dis[s]=0;
    Q.push({s,0});
    while(!Q.empty())
    {
        auto [u,d]=Q.top();
        Q.pop();
        if(vis[u])
            continue;
        vis[u]=true;
        for(auto to: e[u])
        {
            long long nw=d+a[to];
            if(nw>dis[to])
            {
                dis[to]=nw;
                Q.push({to,nw});
            }
        }
    }
}
vector<pair<int,int>>Eset;
char ch[300001];
int in[300001];
int main(){
    int n,m,k;
    scanf("%d %d %d",&n,&m,&k);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    bool flg=false;
    for(int i=1;i<=m;i++)
    {
        int u,v;
        scanf("%d %d",&u,&v);
        e[u].push_back(v);
        e[v].push_back(u);
        flg|=(u==1&&v==n);
        flg|=(u==n&&v==1);
        Eset.push_back({u,v});
    }
    dis[0].resize(n+1);
    dis[1].resize(n+1);
    Dijkstra(1,dis[0]);
    Dijkstra(n,dis[1]);
    for(auto [u,v]: Eset)
    {
        if(dis[0][u]+dis[1][v]==dis[0][n])
            g[u].push_back(v),in[v]++;
        if(dis[0][v]+dis[1][u]==dis[0][n])
            g[v].push_back(u),in[u]++;
    }
    fill(ch+1,ch+n+1,'S');
    if(flg)
    {
        if(n==2&&k==1)
        {
            puts("impossible");
            return 0;
        }
        if(k>1)
        {
            ch[1]=ch[n]='N';
            k-=2;
            int now=2;
            while(k)
            {
                ch[now]='N';
                now++;
                k--;
            }
        }
        else if(k==1)
            ch[2]='N';
    }
    else
    {
        queue<int>Q;
        vector<int>ord;
        for(int i=1;i<=n;i++)
            if(!in[i]&&g[i].size())
                Q.push(i);
        while(!Q.empty())
        {
            int u=Q.front();
            Q.pop();
            ord.push_back(u);
            for(auto to: g[u])
            {
                in[to]--;
                if(!in[to])
                    Q.push(to);
            }
        }
        int comp=min(k,(int)ord.size());
        for(int i=0;i<comp;i++)
            ch[ord[i]]='N';
        for(int i=1;i<=n&&comp;i++)
            if(ch[i]=='S')
            {
                ch[i]='N';
                comp--;
            }
    }
    string ans="";
    for(int i=1;i<=n;i++)
        ans+=ch[i];
    cout<<ans<<endl;
    
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 9960kb

input:

5 10 2
1 1 1 1 1
3 4
5 4
3 1
4 1
3 5
2 1
2 4
2 5
1 5
2 3

output:

NSSSN

result:

ok accepted

Test #2:

score: 0
Accepted
time: 2ms
memory: 10264kb

input:

10 9 5
1 1 1 1 1 1 1 1 1 1
9 5
7 1
8 1
10 1
5 3
6 1
2 1
3 2
4 1

output:

NNNNSSSSSN

result:

ok accepted

Test #3:

score: 0
Accepted
time: 2ms
memory: 9668kb

input:

2 1 2
6124 7094
2 1

output:

NN

result:

ok accepted

Test #4:

score: 0
Accepted
time: 1ms
memory: 8656kb

input:

2 1 1
6901 1417
2 1

output:

impossible

result:

ok accepted

Test #5:

score: -100
Wrong Answer
time: 2ms
memory: 8992kb

input:

50 67 25
5 10 5 4 3 3 8 7 10 4 6 6 9 8 5 1 5 9 3 2 3 8 9 9 2 8 7 8 9 8 3 3 10 7 5 5 7 1 6 9 4 6 9 10 4 10 9 10 9 5
45 35
27 17
11 14
34 1
49 37
4 2
9 3
42 9
13 25
40 32
38 17
28 1
26 14
13 19
41 40
38 40
12 6
14 7
47 25
30 21
32 22
7 6
16 12
15 9
20 16
29 3
21 8
19 9
18 23
43 5
5 3
11 35
10 7
36 16
...

output:

NNNNNNNNNNNNSSSSSSSSSSNSSSSNSSSSSNSSSSSSSSSSSSSSSN

result:

wrong answer number of N:s not equal to k