답안 #874391

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
874391 2023-11-16T20:36:38 Z Hamed_Ghaffari Pipes (CEOI15_pipes) C++17
10 / 100
786 ms 51816 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long       ll;
typedef pair<int, int>  pii;

#define FastIO          cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);
#define FileIO          freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#define F               first
#define S               second
#define max_heap(T)     priority_queue<T>
#define min_heap(T)     priority_queue<T, vector<T>, greater<T>>
#define fr(i,a,b)       for(int i=a;i<b;i++)
#define frr(i,a,b)      for(int i=a;i>b;i--)
#define frin(i,A)       for(auto &i : A)
#define frp(a,b,A)      for(auto [a, b] : A)
#define SZ(x)           (int)x.size()
#define all(A)          A.begin(), A.end()
#define mins(a,b)       a = min(a,b)
#define maxs(a,b)       a = max(a,b)
#define pb              push_back
#define kill(x)         cout << x << '\n', exit(0)
#define md(a)           (a%MOD+MOD)%MOD

const ll  INF  = 2e9;
const ll  MOD  = 1e9 + 7;
const int MAXN = 1e5 + 5;
const int LOG  = 30;

struct edge { int tar, u, v; };

int n, m, par[MAXN][2], hi[MAXN];
vector<edge> g[MAXN];

void DSU() {
	fr(i, 1, n+1)
		par[i][0] = par[i][1] = i;
}
int Find(int v, int x) { return v == par[v][x] ? v : par[v][x] = Find(par[v][x], x); }
void Union(int u, int v) {
	if(Find(u, 0) != Find(v, 0)) {
		par[Find(u, 0)][0] = Find(v, 0);
		g[u].pb({v, u, v});
		g[v].pb({u, u, v});
		return;
	}
	if(Find(u, 1) != Find(v, 1)) {
		par[Find(u, 1)][1] = Find(v, 1);
		g[u].pb({v, u, v});
		g[v].pb({u, u, v});
		return;
	}
}

int dfs(int v, int p, int U, int V) {
	hi[v] = hi[p]+1;
	int res = hi[v];
	frin(u, g[v])
		if(u.tar == p)
			continue;
		else if(!hi[u.tar])
			mins(res, dfs(u.tar, v, u.u, u.v));
		else if(hi[u.tar] < hi[v])
			mins(res, hi[u.tar]);
	if(v != p && res == hi[v])
		cout << U << ' ' << V << '\n';
	return res;
}

void solve() {
	cin >> n >> m;
	DSU();
	int u, v;
	while(m--) {
		cin >> u >> v;
		Union(u, v);
	}
	fr(i, 1, n+1)
		if(!hi[i])
			dfs(i, i, 0, 0);
}

int32_t main() {
	FastIO
	int T = 1;
	// cin >> T;
	while(T--)
		solve();
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2652 KB Output is correct
2 Incorrect 1 ms 2812 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 3420 KB Output is correct
2 Incorrect 3 ms 3192 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 69 ms 6640 KB Output is correct
2 Incorrect 65 ms 6000 KB Wrong number of edges
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 113 ms 9568 KB Wrong number of edges
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 203 ms 15036 KB Output is correct
2 Correct 162 ms 12624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 265 ms 23632 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 407 ms 31980 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 525 ms 40144 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 655 ms 45852 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 786 ms 51816 KB Memory limit exceeded
2 Halted 0 ms 0 KB -