Submission #1352561

#TimeUsernameProblemLanguageResultExecution timeMemory
1352561sallyPPP (EGOI23_ppp)C++20
12 / 100
62 ms15292 KiB
// https://oj.uz/problem/view/EGOI23_ppp
#include<iostream>
#include<vector>
using namespace std;
#define winner first
#define loser second
typedef pair<int,int> pii;
vector<int> player_hold; // 玩家手上拿的medal群的祖先
vector<int> p;
int find(int x) {
    if(p[x]<0) return x;
    return p[x] = find(p[x]);
}
int uni(int a, int b) {
    a = find(a);
    b = find(b);
    if(a == b) return -1;
    if(p[a]>p[b]) swap(a, b);
    p[a] += p[b];
    p[b] = a;
    return a;
}
int main() {
    int N, M;
    cin>>N>>M;
    player_hold.assign(N, -1);
    p.assign(N, -1);
    vector<pii> event(M);
    vector<int> ans(N, 0);
    vector<vector<int>> cnt(M+1, vector<int>(2, 0));
    for(int i=0; i<M; i++) {
        int win, lose;
        cin>>win>>lose;
        event[i] = {win, lose};
    }
    for(int i=M-1; i>=0; i--) {
        cnt[i] = cnt[i+1];
        cnt[i][event[i].winner] = cnt[i+1][event[i].winner] + 1;
    }
    for(int i=0; i<M; i++) {
        if(cnt[i][0] >= cnt[i][1]) ans[0]++;
        else ans[1]++;
    }
    for(int i=0; i<N; i++) cout<<ans[i]<<' ';
}

    // for(int medal = 0; medal<M; medal++) {
    //     vector<int> cnt(N, 0);
    //     int MAXN = N+1, MAX = 0;
    //     int now = event[medal].winner;
    //     cnt[now]++;
    //     MAXN = now;
    //     MAX = 1;
    //     for(int i = medal+1; i<M; i++) {
    //         if(event[i].loser!=now) {
    //             cnt[now]++;
    //             if(cnt[now] == MAX) MAXN = min(MAXN, now);
    //             else if(cnt[now] > MAX) {
    //                 MAX = cnt[now];
    //                 MAXN = now;
    //             }
    //             continue;
    //         }
    //         now = event[i].winner;
    //         cnt[now]++;
    //         if(cnt[now] == MAX) MAXN = min(MAXN, now);
    //         else if(cnt[now] > MAX) {
    //             MAX = cnt[now];
    //             MAXN = now;
    //         }
    //     }
    //     ans[MAXN]++;
    //     //cout<<"medal = "<<medal<<", winner = "<<MAXN<<"\n";
    // }



    //  for(int i=0; i<M; i++) {
    //     int win, lose;
    //     cin>>win>>lose;
    //     event[i].winner = win;
    //     event[i].loser = lose;
    //     if(player_hold[win] == -1) player_hold[win] = i;
    //     else player_hold[win] = uni(player_hold[win], i);
    //     if(player_hold[lose] != -1) player_hold[win] = uni(player_hold[win], player_hold[lose]);
    // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...