제출 #469865

#제출 시각아이디문제언어결과실행 시간메모리
4698651bin산만한 고양이 (KOI17_cat)C++14
33 / 100
296 ms58184 KiB
#include <bits/stdc++.h>
#include <cassert>

using namespace std;

#define all(v) v.begin(), v.end()
typedef long long ll;
const int NMAX = 3e5 + 5;
ll n, m, a, b, dfsn[NMAX], cnt[NMAX], x[NMAX], y[NMAX], t, ans, sum;
vector<int> adj[NMAX];

void dfs(int now, int bef) {
	dfsn[now] = ++t;

	for (int nx : adj[now]) {
		if (nx == bef) continue;
		if (!dfsn[nx]) {
			dfs(nx, now);
			cnt[now] += cnt[nx]; x[now] += x[nx]; y[now] += y[nx];
		}
		else if (dfsn[nx] < dfsn[now]) {
			cnt[bef]++, cnt[nx]--;
			x[now]++;
		}
		else y[bef]++;
	}
	if (!y[now] && cnt[now] <= 1 && !(sum - x[now])) ans += now;
	return;
}

int main(void) {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	cin >> n >> m;
	sum = m - (n - 1);
	while (m--) {
		cin >> a >> b;
		adj[a].emplace_back(b);
		adj[b].emplace_back(a);
	}
	dfs(1, 0);
	cout << ans;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...