답안 #1021656

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1021656 2024-07-13T02:00:09 Z idiotcomputer Pipes (CEOI15_pipes) C++11
40 / 100
820 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];

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

int p[mxN][2];
int ssize[mxN][2];

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; ssize[i][j] = 1;}

	int a,b;
	int x,y;
	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);
			if (ssize[x][0] < ssize[y][0]) swap(x,y);
			ssize[x][0] += ssize[y][0];
			p[y][0] = x;
			continue;
		}
		x = gpar(a,1);
		y = gpar(b,1);
		if (x == y) continue;
		if (ssize[x][1] < ssize[y][1]) swap(x,y);
		ssize[x][1] += ssize[y][1];
		p[y][1] = x;
		adj[a].pb(b);
		adj[b].pb(a);
	}
	for (int i = 0; i < n; i++) d[i] = -1;
	for (int i = 0; i < n; i++) if (d[i] == -1) dfs(i,0,-1);
	
}

# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2660 KB Output is correct
2 Correct 2 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 3420 KB Output is correct
2 Correct 6 ms 3164 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 72 ms 8496 KB Output is correct
2 Correct 60 ms 8276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 109 ms 13560 KB Output is correct
2 Correct 160 ms 14852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 173 ms 21588 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 261 ms 31764 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 385 ms 45448 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 544 ms 58556 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 654 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 820 ms 65536 KB Memory limit exceeded
2 Halted 0 ms 0 KB -