답안 #1053826

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1053826 2024-08-11T18:12:08 Z codexistent Pipes (BOI13_pipes) C++14
74.0741 / 100
519 ms 99952 KB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 100005
#define MAXM 500005
#define FOR(i, a, b) for(ll i = a; i <= b; i++)
#define f first
#define s second

ll n, m, w[MAXN], d[MAXM];
set<ll> adj[MAXN];
pair<ll, pair<ll, ll>> e[MAXM];
bool v[MAXM];
map<pair<ll, ll>, ll> eid;

int main(){
    cin >> n >> m;
    FOR(i, 1, n) cin >> w[i];
    FOR(i, 1, m){
        e[i].f = 0;
        cin >> e[i].s.f >> e[i].s.s;
        adj[e[i].s.f].insert(e[i].s.s), adj[e[i].s.s].insert(e[i].s.f);

        eid.insert({{min(e[i].s.f, e[i].s.s), max(e[i].s.f, e[i].s.s)}, i});
    }

    priority_queue<pair<ll, ll>> pq;
    FOR(i, 1, m) {
        v[i] = false;
        e[i].f = adj[e[i].s.f].size() + adj[e[i].s.s].size() - 2;
        for(auto j : adj[e[i].s.f]){
            if(j != e[i].s.s && adj[j].size() == 2 && adj[e[i].s.s].find(j) != adj[e[i].s.s].end()){
                e[i].f -= 2;
            }
        }

        if(e[i].f == 0){
            pq.push({0, i});
        } else if(adj[e[i].s.f].size() == 1 || adj[e[i].s.s].size() == 1){
            pq.push({1, i});
        }
    }
    while(pq.size()){
        auto pqi = pq.top(); pq.pop();
        if(v[pqi.s]) continue;
        v[pqi.s] = true;

        if(pqi.f == 0){
            ll s = 0;
            for(ll i2 : adj[e[pqi.s].s.f]) if(i2 != e[pqi.s].s.s) {
                s += w[i2];
            }


            d[pqi.s] = w[e[pqi.s].s.f] + w[e[pqi.s].s.s] - s;
        }else if(adj[e[pqi.s].s.f].size() == 1){
            d[pqi.s] = w[e[pqi.s].s.f] * 2;
        }else{
            d[pqi.s] = w[e[pqi.s].s.s] * 2;
        }

        adj[e[pqi.s].s.f].erase(e[pqi.s].s.s);
        adj[e[pqi.s].s.s].erase(e[pqi.s].s.f);
        w[e[pqi.s].s.f] -= d[pqi.s] / 2;
        w[e[pqi.s].s.s] -= d[pqi.s] / 2;

        if(adj[e[pqi.s].s.f].size() == 2){
            ll a = *(adj[e[pqi.s].s.f].begin());
            ll b = *next(adj[e[pqi.s].s.f].begin(), 1);

            if(eid.find({min(a, b), max(a, b)}) != eid.end()){
                e[eid[{min(a, b), max(a, b)}]].f -= 2;

                if(!v[eid[{min(a, b), max(a, b)}]] && e[eid[{min(a, b), max(a, b)}]].f == 0){
                    pq.push({0, eid[{min(a, b), max(a, b)}]});
                }
            }
        }else if(adj[e[pqi.s].s.f].size() == 1){
            ll a = *(adj[e[pqi.s].s.f].begin());
            if(!v[eid[{min(a, e[pqi.s].s.f), max(a, e[pqi.s].s.f)}]]){
                pq.push({1, eid[{min(a, e[pqi.s].s.f), max(a, e[pqi.s].s.f)}]});
            }
        }

        if(adj[e[pqi.s].s.s].size() == 2){
            ll a = *(adj[e[pqi.s].s.s].begin());
            ll b = *next(adj[e[pqi.s].s.s].begin());

            if(eid.find({min(a, b), max(a, b)}) != eid.end()){
                e[eid[{min(a, b), max(a, b)}]].f -= 2;

                if(!v[eid[{min(a, b), max(a, b)}]] && e[eid[{min(a, b), max(a, b)}]].f == 0){
                    pq.push({0, eid[{min(a, b), max(a, b)}]});
                }
            }
        }else if(adj[e[pqi.s].s.s].size() == 1){
            ll a = *(adj[e[pqi.s].s.s].begin());
            if(!v[eid[{min(a, e[pqi.s].s.s), max(a, e[pqi.s].s.s)}]]){
                pq.push({1, eid[{min(a, e[pqi.s].s.s), max(a, e[pqi.s].s.s)}]});
            }
        }
    }

    FOR(i, 1, m) if(!v[i] || d[i] % 2 == 1){
        cout << 0 << endl;
        return 0;
    } 
    FOR(i, 1, n) if(w[i] != 0){
        cout << 0 << endl;
        return 0;
    }

    FOR(i, 1, m) cout << d[i] << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 10584 KB Output is correct
2 Correct 1 ms 10588 KB Output is correct
3 Correct 2 ms 10844 KB Output is correct
4 Correct 195 ms 30400 KB Output is correct
5 Correct 2 ms 10840 KB Output is correct
6 Correct 2 ms 10588 KB Output is correct
7 Correct 1 ms 10588 KB Output is correct
8 Correct 1 ms 10588 KB Output is correct
9 Correct 3 ms 10844 KB Output is correct
10 Correct 2 ms 10844 KB Output is correct
11 Correct 2 ms 10844 KB Output is correct
12 Correct 3 ms 10844 KB Output is correct
13 Correct 160 ms 26844 KB Output is correct
14 Correct 184 ms 29584 KB Output is correct
15 Correct 191 ms 30400 KB Output is correct
16 Correct 164 ms 27884 KB Output is correct
17 Correct 193 ms 30404 KB Output is correct
18 Correct 190 ms 30400 KB Output is correct
19 Correct 201 ms 29780 KB Output is correct
20 Correct 1 ms 10588 KB Output is correct
21 Correct 2 ms 10844 KB Output is correct
22 Correct 202 ms 30392 KB Output is correct
23 Correct 146 ms 26832 KB Output is correct
24 Correct 187 ms 30404 KB Output is correct
25 Correct 166 ms 27648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 10584 KB Output isn't correct
2 Incorrect 1 ms 10844 KB Output isn't correct
3 Correct 84 ms 28896 KB Output is correct
4 Correct 88 ms 29524 KB Output is correct
5 Correct 104 ms 29900 KB Output is correct
6 Correct 475 ms 99952 KB Output is correct
7 Incorrect 1 ms 10584 KB Output isn't correct
8 Incorrect 1 ms 10588 KB Output isn't correct
9 Correct 1 ms 10588 KB Output is correct
10 Correct 1 ms 10588 KB Output is correct
11 Correct 1 ms 10588 KB Output is correct
12 Correct 1 ms 10588 KB Output is correct
13 Correct 1 ms 10588 KB Output is correct
14 Incorrect 1 ms 10588 KB Output isn't correct
15 Incorrect 1 ms 10844 KB Output isn't correct
16 Incorrect 1 ms 10844 KB Output isn't correct
17 Correct 2 ms 10672 KB Output is correct
18 Correct 1 ms 10844 KB Output is correct
19 Correct 1 ms 10844 KB Output is correct
20 Correct 2 ms 10844 KB Output is correct
21 Correct 2 ms 11100 KB Output is correct
22 Incorrect 3 ms 11096 KB Output isn't correct
23 Incorrect 69 ms 26456 KB Output isn't correct
24 Incorrect 93 ms 29644 KB Output isn't correct
25 Correct 84 ms 28880 KB Output is correct
26 Correct 80 ms 29520 KB Output is correct
27 Correct 80 ms 29264 KB Output is correct
28 Correct 99 ms 30572 KB Output is correct
29 Correct 392 ms 84560 KB Output is correct
30 Incorrect 92 ms 29008 KB Output isn't correct
31 Incorrect 78 ms 29344 KB Output isn't correct
32 Incorrect 108 ms 30376 KB Output isn't correct
33 Correct 143 ms 29644 KB Output is correct
34 Correct 104 ms 29452 KB Output is correct
35 Correct 112 ms 29576 KB Output is correct
36 Correct 110 ms 29812 KB Output is correct
37 Correct 519 ms 99936 KB Output is correct
38 Incorrect 112 ms 29524 KB Output isn't correct
39 Incorrect 146 ms 30156 KB Output isn't correct
40 Incorrect 90 ms 29648 KB Output isn't correct
41 Correct 80 ms 29264 KB Output is correct
42 Correct 78 ms 29224 KB Output is correct
43 Correct 69 ms 29184 KB Output is correct
44 Correct 94 ms 29900 KB Output is correct
45 Correct 434 ms 89104 KB Output is correct
46 Incorrect 90 ms 29268 KB Output isn't correct
47 Incorrect 89 ms 29644 KB Output isn't correct
48 Incorrect 74 ms 29524 KB Output isn't correct
49 Correct 94 ms 29376 KB Output is correct
50 Correct 82 ms 29716 KB Output is correct
51 Correct 99 ms 29820 KB Output is correct
52 Correct 76 ms 29280 KB Output is correct
53 Correct 433 ms 90300 KB Output is correct
54 Incorrect 97 ms 29436 KB Output isn't correct