Submission #3878965
Source Code Expand
#include <stdio.h>
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cmath>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
using namespace std;
#define mp make_pair
#define Fi first
#define Se second
#define pb(x) push_back(x)
#define szz(x) ((int)(x).size())
#define rep(i, n) for(int i=0;i<n;i++)
#define all(x) (x).begin(), (x).end()
#define ldb ldouble
typedef unsigned int uint;
typedef tuple<int, int, int> t3;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <ll, int> pli;
typedef pair <db, db> pdd;
int IT_MAX = 1 << 19;
const ll MOD = 1000000007;
const int INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const db PI = acos(-1);
const db ERR = 1e-10;
const int MX = 100005;
int N, M;
int P[MX];
struct UF{
int t[MX];
int find(int x){
return t[x] ? t[x] = find(t[x]) : x;
}
int merge(int a, int b){
a = find(a), b = find(b);
if(a == b) return false;
t[a] = b;
return true;
}
}uf;
vector<int> Vl[MX];
int main()
{
scanf("%d%d", &N, &M);
for(int i = 1; i <= N; i++) scanf("%d", P+i);
for(int i = 1; i <= M; i++){
int a, b;
scanf("%d%d", &a, &b);
uf.merge(a, b);
}
for(int i = 1; i <= N; i++) Vl[uf.find(i)].push_back(i);
int ans = 0;
for(int i = 1; i <= N; i++){
if(uf.find(i) != i) continue;
set<int> X;
for(int c : Vl[i]) X.insert(P[c]);
for(int c : Vl[i]) if(X.find(c) != X.end()) ans++;
}
printf("%d\n", ans);
}
Submission Info
| Submission Time |
|
| Task |
D - Equals |
| User |
zigui |
| Language |
C++14 (GCC 5.4.1) |
| Score |
400 |
| Code Size |
1999 Byte |
| Status |
AC |
| Exec Time |
69 ms |
| Memory |
8440 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:76:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &N, &M);
^
./Main.cpp:77:46: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(int i = 1; i <= N; i++) scanf("%d", P+i);
^
./Main.cpp:80:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &a, &b);
^
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 |
3 ms |
2816 KiB |
| 0_001.txt |
AC |
2 ms |
2560 KiB |
| 0_002.txt |
AC |
2 ms |
2560 KiB |
| 0_003.txt |
AC |
2 ms |
2560 KiB |
| 1_004.txt |
AC |
17 ms |
2560 KiB |
| 1_005.txt |
AC |
38 ms |
6528 KiB |
| 1_006.txt |
AC |
69 ms |
8440 KiB |
| 1_007.txt |
AC |
2 ms |
2560 KiB |
| 1_008.txt |
AC |
2 ms |
2560 KiB |
| 1_009.txt |
AC |
2 ms |
2560 KiB |
| 1_010.txt |
AC |
2 ms |
2560 KiB |
| 1_011.txt |
AC |
2 ms |
2560 KiB |
| 1_012.txt |
AC |
2 ms |
2560 KiB |
| 1_013.txt |
AC |
3 ms |
2560 KiB |
| 1_014.txt |
AC |
3 ms |
2560 KiB |
| 1_015.txt |
AC |
3 ms |
2688 KiB |
| 1_016.txt |
AC |
3 ms |
2688 KiB |
| 1_017.txt |
AC |
3 ms |
2688 KiB |
| 1_018.txt |
AC |
16 ms |
2688 KiB |
| 1_019.txt |
AC |
21 ms |
6144 KiB |
| 1_020.txt |
AC |
22 ms |
6400 KiB |
| 1_021.txt |
AC |
22 ms |
6400 KiB |
| 1_022.txt |
AC |
66 ms |
7928 KiB |