답안 #513836

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
513836 2022-01-17T17:00:53 Z AdamGS 늑대인간 (IOI18_werewolf) C++17
100 / 100
791 ms 98252 KB
#include "werewolf.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const int LIM=2e5+7, LG=20;
vi V[LIM], pytania[LIM], dodaj[LIM];
vector<pair<int,int>>kraw;
set<int>zbior[LIM];
int Fl[LIM], pocz[LIM], kon[LIM], nxt[LIM][LG], lpre;
int Fr[LIM], ile[LIM];
int n, m;
int fndl(int x) {
	if(Fl[x]==x) return x;
	return Fl[x]=fndl(Fl[x]);
}
void unil(int a, int b) {
	a=fndl(a);
	b=fndl(b);
	if(a==b) return;
	Fl[b]=a;
	V[a].pb(b);
}
void DFS(int x) {
	++lpre;
	pocz[x]=lpre;
	for(auto i : V[x]) {
		nxt[i][0]=x;
		DFS(i);
	}
	kon[x]=lpre;
}
int poddrzewo(int v, int l) {
	for(int i=LG-1; i>=0; --i) if(nxt[v][i]>=l) v=nxt[v][i];
	return v;
}
int fndr(int x) {
	if(Fr[x]==x) return x;
	return fndr(Fr[x]);
}
void unir(int a, int b) {
	a=fndr(a);
	b=fndr(b);
	if(a==b) return;
	if(ile[a]<ile[b]) swap(a, b);
	for(auto i : zbior[b]) zbior[a].insert(i);
	zbior[b].clear();
	ile[a]+=ile[b];
	Fr[b]=a;
}
vi check_validity(int N, vi X, vi Y, vi S, vi E, vi L, vi R) {
	n=N;
	m=X.size();
	rep(i, n) Fl[i]=i;
	rep(i, m) {
		if(X[i]>Y[i]) swap(X[i], Y[i]);
		kraw.pb({X[i], Y[i]});
	}
	sort(all(kraw));
	reverse(all(kraw));
	for(auto i : kraw) unil(i.st, i.nd);
	DFS(0);
	for(int j=1; j<LG; ++j) {
		rep(i, n) nxt[i][j]=nxt[nxt[i][j-1]][j-1];
	}
	rep(i, S.size()) pytania[R[i]].pb(i);
	vi ans(S.size());
	rep(i, n) {
		Fr[i]=i;
		ile[i]=1;
		zbior[i].insert(pocz[i]);
	}
	rep(i, m) dodaj[kraw[i].nd].pb(kraw[i].st);
	rep(i, n) {
		for(auto j : dodaj[i]) unir(i, j);
		for(auto j : pytania[i]) {
			int p=poddrzewo(S[j], L[j]);
			int x=fndr(E[j]);
			auto it=zbior[x].lower_bound(pocz[p]);
			if(it==zbior[x].end()) continue;
			auto a=*it;
			if(a<=kon[p]) ans[j]=1;
		}
	}
	return ans;
}

Compilation message

werewolf.cpp: In function 'vi check_validity(int, vi, vi, vi, vi, vi, vi)':
werewolf.cpp:7:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    7 | #define rep(a, b) for(int a = 0; a < (b); ++a)
      |                                    ^
werewolf.cpp:72:2: note: in expansion of macro 'rep'
   72 |  rep(i, S.size()) pytania[R[i]].pb(i);
      |  ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23752 KB Output is correct
2 Correct 15 ms 23800 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23784 KB Output is correct
5 Correct 12 ms 23736 KB Output is correct
6 Correct 12 ms 23720 KB Output is correct
7 Correct 12 ms 23760 KB Output is correct
8 Correct 14 ms 23760 KB Output is correct
9 Correct 15 ms 23760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23752 KB Output is correct
2 Correct 15 ms 23800 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23784 KB Output is correct
5 Correct 12 ms 23736 KB Output is correct
6 Correct 12 ms 23720 KB Output is correct
7 Correct 12 ms 23760 KB Output is correct
8 Correct 14 ms 23760 KB Output is correct
9 Correct 15 ms 23760 KB Output is correct
10 Correct 22 ms 24720 KB Output is correct
11 Correct 22 ms 24692 KB Output is correct
12 Correct 22 ms 24736 KB Output is correct
13 Correct 18 ms 24708 KB Output is correct
14 Correct 19 ms 24784 KB Output is correct
15 Correct 18 ms 24932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 791 ms 83608 KB Output is correct
2 Correct 506 ms 80276 KB Output is correct
3 Correct 459 ms 79484 KB Output is correct
4 Correct 511 ms 79396 KB Output is correct
5 Correct 574 ms 79524 KB Output is correct
6 Correct 641 ms 80028 KB Output is correct
7 Correct 726 ms 81712 KB Output is correct
8 Correct 457 ms 80240 KB Output is correct
9 Correct 419 ms 80176 KB Output is correct
10 Correct 427 ms 77364 KB Output is correct
11 Correct 417 ms 77460 KB Output is correct
12 Correct 587 ms 81064 KB Output is correct
13 Correct 556 ms 92656 KB Output is correct
14 Correct 647 ms 92588 KB Output is correct
15 Correct 569 ms 92428 KB Output is correct
16 Correct 561 ms 92288 KB Output is correct
17 Correct 747 ms 81192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23752 KB Output is correct
2 Correct 15 ms 23800 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23784 KB Output is correct
5 Correct 12 ms 23736 KB Output is correct
6 Correct 12 ms 23720 KB Output is correct
7 Correct 12 ms 23760 KB Output is correct
8 Correct 14 ms 23760 KB Output is correct
9 Correct 15 ms 23760 KB Output is correct
10 Correct 22 ms 24720 KB Output is correct
11 Correct 22 ms 24692 KB Output is correct
12 Correct 22 ms 24736 KB Output is correct
13 Correct 18 ms 24708 KB Output is correct
14 Correct 19 ms 24784 KB Output is correct
15 Correct 18 ms 24932 KB Output is correct
16 Correct 791 ms 83608 KB Output is correct
17 Correct 506 ms 80276 KB Output is correct
18 Correct 459 ms 79484 KB Output is correct
19 Correct 511 ms 79396 KB Output is correct
20 Correct 574 ms 79524 KB Output is correct
21 Correct 641 ms 80028 KB Output is correct
22 Correct 726 ms 81712 KB Output is correct
23 Correct 457 ms 80240 KB Output is correct
24 Correct 419 ms 80176 KB Output is correct
25 Correct 427 ms 77364 KB Output is correct
26 Correct 417 ms 77460 KB Output is correct
27 Correct 587 ms 81064 KB Output is correct
28 Correct 556 ms 92656 KB Output is correct
29 Correct 647 ms 92588 KB Output is correct
30 Correct 569 ms 92428 KB Output is correct
31 Correct 561 ms 92288 KB Output is correct
32 Correct 747 ms 81192 KB Output is correct
33 Correct 720 ms 85676 KB Output is correct
34 Correct 309 ms 55508 KB Output is correct
35 Correct 749 ms 87756 KB Output is correct
36 Correct 725 ms 85460 KB Output is correct
37 Correct 747 ms 86628 KB Output is correct
38 Correct 693 ms 85992 KB Output is correct
39 Correct 548 ms 85644 KB Output is correct
40 Correct 724 ms 98252 KB Output is correct
41 Correct 588 ms 86224 KB Output is correct
42 Correct 614 ms 86540 KB Output is correct
43 Correct 751 ms 93600 KB Output is correct
44 Correct 665 ms 86792 KB Output is correct
45 Correct 544 ms 87348 KB Output is correct
46 Correct 555 ms 86632 KB Output is correct
47 Correct 576 ms 98112 KB Output is correct
48 Correct 560 ms 97880 KB Output is correct
49 Correct 552 ms 98064 KB Output is correct
50 Correct 568 ms 97960 KB Output is correct
51 Correct 703 ms 97740 KB Output is correct
52 Correct 698 ms 97824 KB Output is correct