답안 #642789

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
642789 2022-09-20T13:36:05 Z sanstzu Monthly railway pass (LMIO18_menesinis_bilietas) C++14
16 / 100
849 ms 104012 KB
#include <bits/stdc++.h>
using namespace std;
vector<int> train[500069], bus[500069];
set<int> adj[500069];
int par[500069], sz[500069];
bool visited[500069];
int pars;

void init(){
    for(int i=0; i<500069; i++){
        par[i] = i;
        sz[i] = 1;
        visited[i] = 0;
    }
}

int fp(int x){
    if(par[x]==x) return x;
    else return par[x]=fp(par[x]);
}

void merge(int x, int y){
    int px, py;
    px = fp(x), py = fp(y);
    if(sz[px] > sz[py]){
        par[py] = px;
        sz[px] += sz[py];
    } else {
        par[px] = py;
        sz[py] += sz[px];
    }
    pars--;
}

void search(int x){
    if(visited[x]) return;
    visited[x] = true;
    for(int i: train[x]){
        if(visited[i]) continue;
        if(fp(x) != fp(i)) merge(x,i);
        search(x);
    }
}

int main(){
    init();
    int n,m; cin >> n >> m;
    pars = n;
    for(int i=0; i<m; i++){
        int a,b; char c;
        cin >> a >> b >> c;
        a--; b--;
        if(c=='A'){
            bus[a].push_back(b);
            bus[b].push_back(a);
        } else {
            train[a].push_back(b);
            train[b].push_back(a);
        }
    }
    for(int i=0; i<n; i++){
        if(!visited[i])search(i);
    }

    for(int i=0; i<n; i++){
        for(int j: bus[i]){
            int px = fp(i), py = fp(j);
            adj[px].insert(py);
            adj[py].insert(px);
        }
    }
    int ans = 0;
    for(int i=0; i<n; i++){
        if(fp(i)!=i) continue;
        //if(adj[i].size() != 0) cout << i << " " << adj[i].size() << "\n";
        if(adj[i].size() == pars-1) ans += sz[fp(i)];
    }
    cout << ans << "\n";
}

Compilation message

menesinis_bilietas.cpp: In function 'int main()':
menesinis_bilietas.cpp:76:26: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   76 |         if(adj[i].size() == pars-1) ans += sz[fp(i)];
      |            ~~~~~~~~~~~~~~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 495 ms 62284 KB Output is correct
2 Correct 24 ms 51668 KB Output is correct
3 Correct 25 ms 51792 KB Output is correct
4 Correct 30 ms 51668 KB Output is correct
5 Correct 29 ms 51648 KB Output is correct
6 Correct 140 ms 55040 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 51668 KB Output is correct
2 Correct 29 ms 51648 KB Output is correct
3 Correct 24 ms 51608 KB Output is correct
4 Correct 27 ms 51716 KB Output is correct
5 Correct 30 ms 52416 KB Output is correct
6 Correct 544 ms 86344 KB Output is correct
7 Correct 849 ms 104012 KB Output is correct
8 Correct 41 ms 53588 KB Output is correct
9 Correct 54 ms 54820 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 51668 KB Output is correct
2 Correct 25 ms 51792 KB Output is correct
3 Correct 24 ms 51608 KB Output is correct
4 Correct 27 ms 51716 KB Output is correct
5 Correct 30 ms 52416 KB Output is correct
6 Correct 24 ms 51676 KB Output is correct
7 Correct 24 ms 51620 KB Output is correct
8 Correct 26 ms 51736 KB Output is correct
9 Correct 26 ms 51668 KB Output is correct
10 Incorrect 31 ms 51860 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 51676 KB Output is correct
2 Correct 24 ms 51620 KB Output is correct
3 Correct 26 ms 51736 KB Output is correct
4 Correct 26 ms 51668 KB Output is correct
5 Incorrect 31 ms 51860 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 51676 KB Output is correct
2 Correct 24 ms 51620 KB Output is correct
3 Correct 26 ms 51736 KB Output is correct
4 Correct 26 ms 51668 KB Output is correct
5 Incorrect 31 ms 51860 KB Output isn't correct
6 Halted 0 ms 0 KB -