CSES - Aalto Competitive Programming 2024 - wk2 - Mon - Results
Submission details
Task:Building Teams
Sender:minghao
Submission time:2024-09-09 17:23:05 +0300
Language:C++ (C++11)
Status:READY
Result:
Test results
testverdicttime
#10.42 sdetails
#20.41 sdetails
#30.41 sdetails
#40.42 sdetails
#5ACCEPTED0.00 sdetails
#60.00 sdetails
#70.00 sdetails
#80.00 sdetails
#90.00 sdetails
#100.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails

Compiler report

input/code.cpp: In function 'void Test()':
input/code.cpp:51:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |     freopen("temp\\in.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:57:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |     scanf("%d%d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~
input/code.cpp:65:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |         scanf("%d%d", &a, &b);
      |         ~~~~~^~~~~~~~~~~~~~~~

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
typedef long long LL;

const int N=10005;

int head[N], nxt[4*N], to[4*N], cnt, mark[N];
bool vis[N], fail_flag;


void Add(int u, int v) {
  nxt[++cnt] = head[u];  // 当前边的后继
  head[u] = cnt;         // 起点 u 的第一条边
  to[cnt] = v;           // 当前边的终点
}

bool DFS(int u, int father)
{
    if(father == 0)
        mark[u] = 1;
    int son_mark = 2;
    if(mark[u] == 2)
        son_mark = 1; 
    
    for (int i = head[u]; ~i; i = nxt[i]) 
    {
        int v = to[i];

        if(v == father)
            continue;

        if(vis[v] && mark[v]!=son_mark)
        {
            fail_flag = true;
            break;
        } else {
            vis[v] = true;
            mark[v] = son_mark;
            if(!DFS(v, u))
                break;
        }
    }

    return !fail_flag;
}


void Test()
{
    freopen("temp\\in.txt", "r", stdin);
}
int main()
{
    // Test();
    int n, m;
    scanf("%d%d", &n, &m);
 
    for(int i=1; i<=n; i++)
        head[i] = -1;

    for(int i=1; i<=m; i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        Add(a, b);
        Add(b, a);
    }

    for(int i=1; i<=n; i++)
    {
        if(!vis[i] && !DFS(i, 0))
            break;
    }

    if(fail_flag)
        printf("IMPOSSIBLE");
    else
        for(int i=1; i<=n; i++)
            printf("%d ", mark[i]);
    return 0;
}

Test details

Test 1

Verdict:

input
10 20
3 4
8 10
3 7
1 8
...

correct output
1 1 1 2 2 1 2 2 2 1 

user output
(empty)

Test 2

Verdict:

input
10 20
1 3
8 10
2 4
6 8
...

correct output
1 1 2 2 1 1 1 2 1 1 

user output
(empty)

Test 3

Verdict:

input
10 20
7 10
3 10
9 10
2 10
...

correct output
1 2 2 1 1 1 2 1 2 1 

user output
(empty)

Test 4

Verdict:

input
10 20
2 4
2 10
7 10
4 6
...

correct output
1 2 1 1 2 2 2 1 2 1 

user output
(empty)

Test 5

Verdict: ACCEPTED

input
10 20
3 5
8 10
9 10
1 8
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Verdict:

input
100000 200000
47355 96505
90709 92058
735 80715
91802 94265
...

correct output
1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ...

user output
(empty)

Test 7

Verdict:

input
100000 200000
59991 95794
95150 96051
78453 94730
90411 95523
...

correct output
1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ...

user output
(empty)

Test 8

Verdict:

input
100000 200000
89827 96402
65137 86792
80965 94708
19479 48078
...

correct output
1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ...

user output
(empty)

Test 9

Verdict:

input
100000 200000
72952 83723
66197 70052
2949 52160
55753 95651
...

correct output
1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ...

user output
(empty)

Test 10

Verdict:

input
100000 200000
38942 96755
70049 82663
7746 72732
87819 99029
...

correct output
IMPOSSIBLE

user output
(empty)

Test 11

Verdict: ACCEPTED

input
5 4
1 2
3 4
4 5
5 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 12

Verdict: ACCEPTED

input
4 5
1 2
1 4
2 3
2 4
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE