Submission #2560341
Source Code Expand
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for(int i = 0 ; i < (int)(n) ; i++) typedef long long ll; typedef long double Double; #ifndef INPUTS_DIR #define INPUTS_DIR "./" #endif struct UnionFind { vector<int> data; UnionFind(int size) : data(size, -1) {} bool unionSet(int x, int y) { x = root(x); y = root(y); if (x != y) { if (data[y] < data[x]) swap(x, y); data[x] += data[y]; data[y] = x; } return x != y; } bool findSet(int x, int y) { return root(x) == root(y); } int root(int x) { return data[x] < 0 ? x : data[x] = root(data[x]); } int size(int x) { return -data[root(x)]; } }; void solve(ll N, ll M, vector<ll> p, vector<ll> x, vector<ll> y) { UnionFind uf(N); for (int i = 0; i < M; i++) { x[i]--, y[i]--; uf.unionSet(x[i], y[i]); } int ans = 0; for (int i = 0; i < N; i++) { p[i]--; if (uf.findSet(p[i], i)) ans++; } cout << ans << endl; } void main_(istream &cin) { ll N; ll M; cin >> N; vector<ll> p(N - 1 + 1); cin >> M; vector<ll> y(M - 1 + 1); vector<ll> x(M - 1 + 1); for (int i = 0; i <= N - 1; i++) { cin >> p[i]; } for (int i = 0; i <= M - 1; i++) { cin >> x[i]; cin >> y[i]; } solve(N, M, p, x, y); } int main() { #ifdef INTELLIJ ifstream ifs(string(INPUTS_DIR) + "in_1.txt"); if (ifs.is_open()) { main_(ifs); ifs.close(); } else { cerr << "Error: no input." << endl; } #else ios::sync_with_stdio(false); cin.tie(0); main_(cin); #endif }
Submission Info
Submission Time | |
---|---|
Task | D - Equals |
User | kyuridenamida |
Language | C++14 (GCC 5.4.1) |
Score | 400 |
Code Size | 1722 Byte |
Status | AC |
Exec Time | 30 ms |
Memory | 5376 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 400 / 400 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt |
All | 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
0_000.txt | AC | 1 ms | 256 KB |
0_001.txt | AC | 1 ms | 256 KB |
0_002.txt | AC | 1 ms | 256 KB |
0_003.txt | AC | 1 ms | 256 KB |
1_004.txt | AC | 16 ms | 3328 KB |
1_005.txt | AC | 27 ms | 5376 KB |
1_006.txt | AC | 30 ms | 5376 KB |
1_007.txt | AC | 1 ms | 256 KB |
1_008.txt | AC | 1 ms | 256 KB |
1_009.txt | AC | 1 ms | 256 KB |
1_010.txt | AC | 1 ms | 256 KB |
1_011.txt | AC | 1 ms | 256 KB |
1_012.txt | AC | 1 ms | 256 KB |
1_013.txt | AC | 1 ms | 256 KB |
1_014.txt | AC | 2 ms | 384 KB |
1_015.txt | AC | 1 ms | 256 KB |
1_016.txt | AC | 1 ms | 256 KB |
1_017.txt | AC | 1 ms | 256 KB |
1_018.txt | AC | 15 ms | 3072 KB |
1_019.txt | AC | 10 ms | 2176 KB |
1_020.txt | AC | 10 ms | 2176 KB |
1_021.txt | AC | 10 ms | 2304 KB |
1_022.txt | AC | 30 ms | 5376 KB |