답안 #1021663

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1021663 2024-07-13T02:05:41 Z idiotcomputer Pipes (CEOI15_pipes) C++11
40 / 100
735 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define sz size 

const int mxN = 1e5;
vector<int> adj[mxN];
//int d[mxN];
//int low[mxN];
int p[mxN][2];
int ss[mxN][2];

void dfs(int c, int depth, int par){
	p[c][0] = depth;
	p[c][1] = depth;
	int op = par;
	for (int i : adj[c]){
		if (i == par){par = -1; continue;}
		if (p[i][0] != -1){ p[c][1] = min(p[c][1],p[i][0]); continue;}
		dfs(i,depth+1,c);
		p[c][1] = min(p[c][1], p[i][1]);
	}
	if (p[c][1]>= depth && op != -1) cout << c+1 << " " << op+1 << '\n';
}



int gpar(int c, int w){
	if (p[c][w] == c) return c;
	p[c][w] = gpar(p[c][w],w);
	return p[c][w];
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n,m;
	cin >> n >> m;
	for (int i = 0; i < n; i++) for (int j = 0; j < 2; j++) {p[i][j] = i; ss[i][j] = 1;}

	int a,b;
	int x,y;
	int cnt = 0;
	for (int i = 0; i < m; i++){
		cin >> a >> b;
		a -= 1;
		b -= 1;
		x = gpar(a,0);
		y = gpar(b,0);
		if (x != y){
			adj[a].pb(b);
			adj[b].pb(a);
			cnt++;
			if (ss[x][0] < ss[y][0]) swap(x,y);
			ss[x][0] += ss[y][0];
			p[y][0] = x;
			continue;
		}
		x = gpar(a,1);
		y = gpar(b,1);
		if (x == y) continue;
		if (ss[x][1] < ss[y][1]) swap(x,y);
		ss[x][1] += ss[y][1];
		p[y][1] = x;
		adj[a].pb(b);
		adj[b].pb(a);
		cnt++;
	}
	for (int i = 0; i < n; i++) p[i][0] = -1;
	for (int i = 0; i < n; i++) if (p[i][0] == -1) dfs(i,0,-1);
	return 0;	
}

# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Correct 2 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 3416 KB Output is correct
2 Correct 4 ms 3080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 8532 KB Output is correct
2 Correct 60 ms 8276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 105 ms 13396 KB Output is correct
2 Correct 124 ms 14672 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 169 ms 21532 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 299 ms 31116 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 362 ms 44372 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 491 ms 57172 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 605 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 735 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -