답안 #109156

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
109156 2019-05-05T06:05:16 Z njchung99 전압 (JOI14_voltage) C++14
0 / 100
128 ms 14148 KB
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#include<stack>
using namespace std;
int n, m;
stack<int> st;
pair<int, int> a[200010];
vector<vector<int>> vt;
int par[100010];
int de[100010];
int visited[100010];
int used[100010];
int dp[100010];
int dp1[100010];
int dap = 0;
int odd = 0;
void dfs(int here) {
	st.push(here);
	visited[here] = 1;
	for (int i = 0; i < vt[here].size(); i++) {
		int id = vt[here][i];
		int next = a[id].first^a[id].second^here;
		if (!visited[next]) {
			used[id] = 1;
			par[next] = here;
			de[next] = de[here] + 1;
			dfs(next);
		}
	}
}
int main()
{
	scanf("%d %d", &n, &m);
	vt.resize(n + 1);
	for (int i = 0; i < m; i++) {
		int q, w;
		scanf("%d %d", &q, &w);
		vt[q].push_back(i);
		vt[w].push_back(i);
		a[i] = { q,w };
	}
	for (int i = 1; i <= n; i++) {
		if(!visited[i])
			dfs(i);
	}
	for (int i = 0; i < m; i++) {
		if (used[i])continue;
		if (de[a[i].first] < de[a[i].second])
			swap(a[i].first, a[i].second);
		if (de[a[i].first] % 2 == de[a[i].second] % 2) {
			dp[a[i].first]++; dp[a[i].second]--;
			odd++;
		}
		else {
			dp1[a[i].first]++; dp1[a[i].second]--;
		}
	}
	if (odd == 1)dap++;
	while (st.size()) {
		int t = st.top();
		int p = par[t];
		st.pop();
		if (par[t] && de[t] && dp1[t] == 0)dap++;
		dp[p] += dp[t];
		dp1[p] += dp1[t];
	}
	printf("%d\n", dap);
}

Compilation message

voltage.cpp: In function 'void dfs(int)':
voltage.cpp:22:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < vt[here].size(); i++) {
                  ~~^~~~~~~~~~~~~~~~~
voltage.cpp: In function 'int main()':
voltage.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
voltage.cpp:39:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &q, &w);
   ~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 3 ms 512 KB Output is correct
6 Correct 2 ms 512 KB Output is correct
7 Incorrect 3 ms 512 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 8948 KB Output is correct
2 Correct 128 ms 12060 KB Output is correct
3 Incorrect 83 ms 8912 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 9076 KB Output is correct
2 Correct 51 ms 13980 KB Output is correct
3 Incorrect 55 ms 14148 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 61 ms 10204 KB Output isn't correct
2 Halted 0 ms 0 KB -