Submission #101936


Source Code Expand

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>

using namespace std;

typedef pair<int,int> P;

const int MAX = 1e5+1;

struct query{int q, a,b;};
class UnionFind{
public:
	vector<int> par;
	vector<int> rank;
	void init(int n){
		par.resize(n);
		rank.resize(n);

		for(int i = 0; i < n; i++){
			par[i] = i;
			rank[i] = 0;
		}
	}

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

	void unite(int x, int y){
		x = find(x);
		y = find(y);
	 
		if(x == y) return;
		
		if(rank[x] < rank[y]){
			par[x] = y;
		}else{
			par[y] = x;
			if(rank[x] == rank[y]) rank[x]++;
		}
	}

	bool same(int x, int y){
		return find(x) == find(y);
	}
};

int N,M,K;

int main(){

	UnionFind uf;
	cin >> N >> M >> K;
	uf.init(N);
	
	vector<P> E;
	for(int i = 0; i < M; i++){
		P p;
		cin >> p.first >> p.second;
		p.first--;
		p.second--;
		E.push_back(p);
	}
	
	vector<query> Q(K);
	for(int i = 0; i < K; i++){
		cin >> Q[i].q;
		if(Q[i].q == 0) cin >> Q[i].a;
		else cin >> Q[i].a >> Q[i].b;
		Q[i].a--;
		Q[i].b--;
	}

	reverse(Q.begin(),Q.end());
	vector<bool> ans;

	bool erase[MAX];
	memset(erase,false,sizeof(erase));

	for(int i = 0; i < (int)Q.size();i++){
		if(Q[i].q == 0) erase[Q[i].a] = true;
	}

	for(int i = 0; i < E.size(); i++)
		if(!erase[i]) uf.unite(E[i].first,E[i].second);

	
	for(int i = 0; i < Q.size(); i++){
		if(Q[i].q == 0) uf.unite(E[Q[i].a].first,E[Q[i].a].second);
		else ans.push_back(uf.same(Q[i].a, Q[i].b));
	}
	reverse(ans.begin(),ans.end());

	for(int i = 0; i < ans.size(); i++)
		if(ans[i]) cout << "YES" << endl;
		else cout << "NO" << endl;
								 
	return 0;
}

Submission Info

Submission Time
Task D - Graph Destruction
User tanondaZukky
Language C++ (GCC 4.4.7)
Score 100
Code Size 1769 Byte
Status AC
Exec Time 520 ms
Memory 3988 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 37
Set Name Test Cases
All 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 4, 5, 50, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 22 ms 804 KB
10 AC 31 ms 936 KB
11 AC 68 ms 1196 KB
12 AC 165 ms 1572 KB
13 AC 297 ms 2208 KB
14 AC 440 ms 2676 KB
15 AC 482 ms 3360 KB
16 AC 520 ms 3988 KB
17 AC 161 ms 1704 KB
18 AC 149 ms 1696 KB
19 AC 196 ms 1956 KB
2 AC 21 ms 804 KB
20 AC 267 ms 2216 KB
21 AC 190 ms 1960 KB
22 AC 261 ms 2216 KB
23 AC 198 ms 1820 KB
24 AC 132 ms 1568 KB
25 AC 152 ms 1708 KB
26 AC 394 ms 2972 KB
27 AC 131 ms 1544 KB
28 AC 142 ms 1568 KB
29 AC 321 ms 2400 KB
3 AC 21 ms 796 KB
30 AC 229 ms 2076 KB
31 AC 377 ms 2844 KB
32 AC 303 ms 2396 KB
33 AC 336 ms 2520 KB
34 AC 390 ms 2972 KB
35 AC 358 ms 2728 KB
36 AC 170 ms 1824 KB
4 AC 21 ms 804 KB
5 AC 24 ms 880 KB
50 AC 387 ms 2900 KB
6 AC 23 ms 808 KB
7 AC 24 ms 804 KB
8 AC 25 ms 808 KB
9 AC 28 ms 888 KB