QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#408694#6705. MedianyldWA 2ms3636kbC++202.8kb2024-05-10 21:27:372024-05-10 21:27:39

Judging History

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

  • [2024-05-10 21:27:39]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3636kb
  • [2024-05-10 21:27:37]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int MAXN=2e2+5;
inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch))
    {
        if(ch=='-'){f=-1;}
        ch=getchar();
    }
    while(isdigit(ch))
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
void solve()
{
    int n=read(),m=read();
    vector<int> edge1[n+1],edge2[n+1],deg1(n+1),deg2(n+1),vis(n+1),num1(n+1),num2(n+1),deg3(n+1),deg4(n+1);
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read();
        edge1[u].push_back(v);
        deg1[v]++;
        edge2[v].push_back(u);
        deg2[u]++;
    }
    queue<int> q;
    auto topo1=[&]()->void
    {
        for(int i=1;i<=n;i++) vis[i]=0;
        for(int i=1;i<=n;i++) if(deg1[i]==0) q.push(i);
        while(q.size())
        {
            int u=q.front();
            vis[u]=1;
            q.pop();
            for(auto v:edge1[u])
            {
                deg1[v]--;
                if(deg1[v]==0) q.push(v);
            }
        }    
    };
    auto topo2=[&]()->void
    {
        for(int i=1;i<=n;i++) vis[i]=0;
        for(int i=1;i<=n;i++) if(deg2[i]==0) q.push(i);
        while(q.size())
        {
            int u=q.front();
            vis[u]=1;
            q.pop();
            for(auto v:edge2[u])
            {
                deg2[v]--;
                if(deg2[v]==0) q.push(v);
            }
        }    
    };
    topo1();
    int flag=0;
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            flag=1;
            break;
        }
    }
    if(flag)
    {
        for(int i=1;i<=n;i++) cout<<0;
        cout<<endl;
        return;
    }
    topo2();
    flag=0;
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            flag=1;
            break;
        }
    }
    if(flag)
    {
        for(int i=1;i<=n;i++) cout<<0;
        cout<<endl;
        return;
    }
    function <int(int)>dfs1=[&](int u)->int
    {
        if(num1[u]) return num1[u];
        num1[u]=1;
        for(auto v:edge1[u])
        {
            num1[u]+=dfs1(v);
        }
        return num1[u];
    };
    function <int(int)>dfs2=[&](int u)->int
    {
        if(num2[u]) return num2[u];
        num2[u]=1;
        for(auto v:edge2[u])
        {
            num2[u]+=dfs2(v);
        }
        return num2[u];
    };
    for(int i=1;i<=n;i++)
    {
        int num1=dfs1(i);
        int num2=dfs2(i);
        // cout<<num1<<' '<<num2<<endl;
        if(n-num1-num2+1>=abs(num1-num2)) cout<<1;
        else cout<<0;
    }
    cout<<endl;
}
signed main()
{
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}
//

详细

Test #1:

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

input:

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

output:

01000
000

result:

ok 2 lines

Test #2:

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

input:

66
13 2
9 13
7 11
11 19
9 1
8 1
5 1
2 8
4 2
2 1
5 2
6 3
3 11
3 2
4 6
6 10
9 8
3 5
1 7
5 8
3 9
4 9
6 7
3 1
2 3
11 6
9 4
1 6
5 2
1 5
4 6
8 4
15 15
10 6
15 8
7 6
11 1
5 2
3 4
11 13
4 6
10 12
10 13
1 6
15 2
5 12
13 14
5 3
15 86
14 12
8 1
14 9
8 15
5 10
1 9
11 2
6 2
7 10
10 13
14 5
4 13
5 8
4 10
13 9
6 9...

output:

1111111111111
00000000111
111
11111111111
111111111111111
000000000000000
00000
01000
1111111
0000000000000
111000101
111111111
000000001010000
010111111
000000000
0000000000000
1111111111111
000000000000000
00000101001
000000000000000
11111111111
00000000000
11111
00000000000
11101110111
00000
1111...

result:

wrong answer 2nd lines differ - expected: '01001000111', found: '00000000111'