QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#202432#5160. Kebab PizzaDreamOnWA 1ms5620kbC++232.0kb2023-10-06 01:57:372023-10-06 01:57:38

Judging History

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

  • [2023-10-06 01:57:38]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5620kb
  • [2023-10-06 01:57:37]
  • 提交

answer

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <map>

#define Maxn 100005
#define MP(x, y) make_pair(x, y)
#define pii pair <int, int>

using namespace std;

int n, m, deg[Maxn]; bool selfLoop[Maxn];
map <pii, bool> app;

struct Edge {
    int next, to;
}
edge[Maxn * 2];
int head[Maxn], edge_num;

void add_edge(int from, int to) {
    edge[++edge_num].next = head[from];
    edge[edge_num].to = to;
    head[from] = edge_num;
}

bool vis[Maxn]; int maxdeg, mindeg;
void dfs(int u) {
    vis[u] = 1;
    maxdeg = max(maxdeg, deg[u]);
    mindeg = min(mindeg, deg[u]);
    for(int i = head[u]; i; i = edge[i].next) {
        int v = edge[i].to;
        if(vis[v]) continue;
        dfs(v);
    }
}

int main() {
    scanf("%d%d", &m, &n);
    int u, v;
    for(int i = 1; i <= m; ++i) {
        scanf("%d%d", &u, &v);
        if(u > v) swap(u, v);
        if(app.find(MP(u, v)) != app.end()) continue;
        if(u == v) {selfLoop[u] = 1; continue;}
        add_edge(u, v); add_edge(v, u);
        ++deg[u]; ++deg[v]; app[MP(u, v)] = 1;
    }
    for(int i = 1; i <= n; ++i) {
        if(deg[i] == 1 && !selfLoop[i]) vis[i] = 1;
    }
    for(int i = 1; i <= n; ++i) if(vis[i]) --deg[i], --deg[edge[head[i]].to];
    int cnt1 = 0, cnt2 = 0, cnt3 = 0;
    for(int i = 1; i <= n; ++i) {
        maxdeg = 0; mindeg = n + 1;
        if(vis[i]) continue;
        if(!deg[i]) {
            if(selfLoop[i]) ++cnt1;
            vis[i] = 1; continue;
        }
        dfs(i);
        if(maxdeg == 2 && mindeg == 2) ++cnt2;
        else if(maxdeg == 2 && mindeg == 1) ++cnt1;
        else if(maxdeg == 1 && mindeg == 1) ++cnt1;
        else if(maxdeg >= 3) ++cnt3;
        // cerr << "dfs log " << i << " " << mindeg << " " << maxdeg << endl;
    }
    // cout << cnt1 << " " << cnt2 << " " << cnt3 << endl;
    if(cnt3 || (cnt2 > 1) || (cnt2 && cnt1)) cout << "impossible" << endl;
    else cout << "possible" << endl;
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

7 6
2 2
3 6
1 1
1 5
4 5
6 6
6 5

output:

possible

result:

ok single line: 'possible'

Test #2:

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

input:

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

output:

possible

result:

ok single line: 'possible'

Test #3:

score: 0
Accepted
time: 0ms
memory: 3572kb

input:

6 7
1 2
2 3
3 4
4 5
3 6
6 7

output:

impossible

result:

ok single line: 'impossible'

Test #4:

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

input:

8 4
1 1
1 2
2 1
2 2
3 3
3 4
4 3
4 4

output:

possible

result:

ok single line: 'possible'

Test #5:

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

input:

4 4
1 2
2 1
3 4
4 3

output:

possible

result:

ok single line: 'possible'

Test #6:

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

input:

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

output:

possible

result:

ok single line: 'possible'

Test #7:

score: 0
Accepted
time: 0ms
memory: 3440kb

input:

6 4
1 1
1 4
2 2
2 4
3 3
3 4

output:

impossible

result:

ok single line: 'impossible'

Test #8:

score: -100
Wrong Answer
time: 0ms
memory: 3436kb

input:

4 5
1 2
3 4
4 5
5 3

output:

possible

result:

wrong answer 1st lines differ - expected: 'impossible', found: 'possible'