Submission #101899


Source Code Expand

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <utility>
using namespace std;

const int MAX_N = 100000;

struct Query
{
	bool type;
	int x,y;
};
typedef pair<int,int> Pii;

int par[MAX_N];
int rank[MAX_N];
Query q[MAX_N];

void init(int 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 main()
{
	int N, M, K;
	cin >> N >> M >> K;

	bool use[M];
	memset(use, 0xff, sizeof(use));
	init(N);

	//edge
	Pii e[M];
	for (int i=0; i<M; i++)
	{
		cin >> e[i].first >> e[i].second;
		e[i].first--; e[i].second--;
		//cout << "edge" << i << ": " << e[i].first << ' ' << e[i].second << endl;
	}

	//query
	for (int i=0; i<K; i++)
	{
		cin >> q[i].type;
		if (!q[i].type)
		{
			cin >> q[i].x;
			q[i].x--;
			use[ q[i].x ] = 0;
		}
		else
		{
			cin >> q[i].x >> q[i].y;
			q[i].x--; q[i].y--;
		}
	}

	//final state
	for (int i=0; i<M; i++)
		if (use[i])
		{
			//cout << i << endl;
			unite(e[i].first, e[i].second);
			//cout << "un:" << e[i].first << ' ' << e[i].second << endl;
		}

	//reversely exec query reverse
	//cout << "---" << endl;
	vector<int> res;
	for (int i=K-1; i>=0; i--)
	{
		if (q[i].type)
		{
			res.push_back(same(q[i].x, q[i].y));
			//cout << "q:" << q[i].x << ' ' << q[i].y << ' ' << same(q[i].x, q[i].y) << endl;
		}
		else
		{
			//cout << q[i].x << endl;
			//cout << "un:" << e[q[i].x].first << ' ' << e[q[i].x].second << endl;
			unite(e[ q[i].x ].first, e[ q[i].x ].second);
		}
	}

	reverse(res.begin(), res.end());
	for (int i=0; i<res.size(); i++)
		cout << (res[i] ? "YES" : "NO") << endl;

}

Submission Info

Submission Time
Task D - Graph Destruction
User ytsiden
Language C++ (GCC 4.4.7)
Score 100
Code Size 2033 Byte
Status AC
Exec Time 530 ms
Memory 4244 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 932 KB
10 AC 30 ms 808 KB
11 AC 69 ms 1064 KB
12 AC 165 ms 1632 KB
13 AC 308 ms 2384 KB
14 AC 440 ms 2976 KB
15 AC 490 ms 3620 KB
16 AC 530 ms 4244 KB
17 AC 161 ms 1700 KB
18 AC 150 ms 1700 KB
19 AC 195 ms 1964 KB
2 AC 22 ms 804 KB
20 AC 362 ms 2352 KB
21 AC 194 ms 1956 KB
22 AC 267 ms 2296 KB
23 AC 201 ms 1888 KB
24 AC 133 ms 1568 KB
25 AC 155 ms 1704 KB
26 AC 398 ms 3112 KB
27 AC 133 ms 1508 KB
28 AC 144 ms 1700 KB
29 AC 312 ms 2600 KB
3 AC 22 ms 808 KB
30 AC 231 ms 2204 KB
31 AC 378 ms 2968 KB
32 AC 311 ms 2520 KB
33 AC 336 ms 2720 KB
34 AC 399 ms 3104 KB
35 AC 354 ms 2848 KB
36 AC 174 ms 1784 KB
4 AC 21 ms 804 KB
5 AC 22 ms 804 KB
50 AC 376 ms 2964 KB
6 AC 22 ms 800 KB
7 AC 23 ms 928 KB
8 AC 24 ms 800 KB
9 AC 26 ms 804 KB