Submission #101844


Source Code Expand

import static java.lang.System.in;
import static java.lang.System.out;

import java.io.*;
import java.util.*;

public class Main {
	static final double EPS = 1e-10;
	static final double INF = 1 << 31;
	static final double PI = Math.PI;

	public static Scanner sc = new Scanner(in);
	StringBuilder sb = new StringBuilder();
	BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

	static final String br = System.getProperty("line.separator");
	
	public static class UnionFind{
		public int[] par,rank;
		public int size;
		public UnionFind(int n){
			par=new int[n];
			for(int i=0;i<n;i++)par[i]=i;
			rank=new int[n];
			size=n;
		}
		public int find(int x){
			if(par[x]==x)return x;
			return par[x]=find(par[x]);
		}
		public boolean same(int x,int y){
			return find(x)==find(y);
		}
		public 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]++;
			size--;
		}
	}
	
	class Edge{
		int f,t;
		Edge(int _f,int _t){
			f=_f;t=_t;
		}
	}
	
	class Task{
		int k;
		int e;
		int v;
		int w;
		Task(int _k,int _e){
			k=_k;e=_e;
		}
		Task(int _k,int _v,int _w){
			k=_k;v=_v;w=_w;
		}
		
	}
	
	
	public void run() throws IOException {
		int N=sc.nextInt(),M=sc.nextInt(),K=sc.nextInt();
	
		Edge[] es=new Edge[M];
		for(int i=0;i<M;i++){
			es[i]=new Edge(sc.nextInt()-1,sc.nextInt()-1);
		}
		Task[] tasks=new Task[K];
		
		for(int i=0;i<K;i++){
			int k=sc.nextInt();
			if(k==0){
				tasks[i]=new Task(k,sc.nextInt()-1);
			}else{
				tasks[i]=new Task(k,sc.nextInt()-1,sc.nextInt()-1);			
			}
		}

		boolean[] ex=new boolean[M];
		Arrays.fill(ex,true);
		for(int i=0;i<K;i++){
			if(tasks[i].k==0){
				ex[tasks[i].e]=false;
			}
		}
		
		UnionFind uf=new UnionFind(N);
		for(int i=0;i<M;i++){
			if(ex[i]){
				uf.unite(es[i].f,es[i].t);
			}
		}
		
		List<String> res=new ArrayList<String>();
		
		
		for(int i=K-1;i>=0;i--){
			if(tasks[i].k==0){
				int ei=tasks[i].e;
				uf.unite(es[ei].f,es[ei].t);
			}else{
				if(uf.same(tasks[i].v, tasks[i].w)){
					res.add("YES");
				}else{
					res.add("NO");					
				}
			}			
		}
		
		for(int i=res.size()-1;i>=0;i--){
			sb.append(res.get(i)+br);
		}
		pr(sb);
	}

	public static void main(String[] args) throws IOException {
		new Main().run();
	}
	public static void pr(Object obj) {
		out.print(obj);
	}
	public static void ln(Object obj) {
		out.println(obj);
	}
}

Submission Info

Submission Time
Task D - Graph Destruction
User AND10
Language Java (OpenJDK 1.7.0)
Score 100
Code Size 2580 Byte
Status AC
Exec Time 1493 ms
Memory 45680 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 476 ms 23220 KB
10 AC 639 ms 30512 KB
11 AC 799 ms 37728 KB
12 AC 917 ms 37768 KB
13 AC 1106 ms 41604 KB
14 AC 1205 ms 42552 KB
15 AC 1333 ms 44080 KB
16 AC 1493 ms 45680 KB
17 AC 950 ms 39068 KB
18 AC 932 ms 38952 KB
19 AC 1013 ms 39620 KB
2 AC 493 ms 23224 KB
20 AC 1161 ms 41120 KB
21 AC 994 ms 39892 KB
22 AC 1086 ms 41240 KB
23 AC 1022 ms 39596 KB
24 AC 901 ms 37568 KB
25 AC 998 ms 39016 KB
26 AC 1333 ms 43408 KB
27 AC 941 ms 37476 KB
28 AC 936 ms 37828 KB
29 AC 1182 ms 41728 KB
3 AC 517 ms 23348 KB
30 AC 1124 ms 40144 KB
31 AC 1270 ms 43384 KB
32 AC 1153 ms 41764 KB
33 AC 1238 ms 41632 KB
34 AC 1330 ms 43892 KB
35 AC 1275 ms 42440 KB
36 AC 966 ms 39404 KB
4 AC 465 ms 23860 KB
5 AC 451 ms 23988 KB
50 AC 1235 ms 42756 KB
6 AC 478 ms 24496 KB
7 AC 516 ms 25012 KB
8 AC 543 ms 25964 KB
9 AC 620 ms 27864 KB