提出 #373352


ソースコード 拡げる

#include <iostream>
#include <stack>
#include <vector>
#include <utility>

using namespace std;

const int MAX_N = 100000;

typedef int edge;

vector<edge> g[MAX_N + 1];

int main() {
	stack<pair<int, int>> searchStack;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int a, b;
		cin >> a >> b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	
	vector<bool> visited(n + 1, false);
	vector<int> previous(n + 1, -1);
	searchStack.push(make_pair(1, -1));
	while (!searchStack.empty()) {
		pair<int, int> currentStatus = searchStack.top(); searchStack.pop();
		int currentVertex = currentStatus.first;
		int previousVertex = currentStatus.second;
		visited.at(currentVertex) = true;

		vector<edge> edges = g[currentVertex];

		// detecting loop
		bool hasLoop = false;
		int loopOriginVertex = 0;
		for (vector<edge>::iterator edgeIt = edges.begin(); edgeIt != edges.end(); ++edgeIt) {
			int nextVertex = (*edgeIt);
			if (visited.at(nextVertex) && nextVertex != previousVertex) {
				hasLoop = true;
				loopOriginVertex = nextVertex;
			}
		}
		
		if (hasLoop) {
			// counting loop length
			int loopLength = 1;
			int currentLoopVertex = currentVertex;
			while (currentLoopVertex != loopOriginVertex) {
				loopLength++;
				currentLoopVertex = previous.at(currentLoopVertex);
			}

			// output
			bool hasBranch = loopLength == n ? false : true;
			cout << (hasBranch ? 1 : 2) << " ";
			cout << n - (loopLength % 2) << endl;
			return 0;
		}

		for (vector<edge>::iterator edgeIt = edges.begin(); edgeIt != edges.end(); ++edgeIt) {
			int nextVertex = (*edgeIt);
			if (!visited.at(nextVertex)) {
				searchStack.push(make_pair(nextVertex, currentVertex));
				previous.at(nextVertex) = currentVertex;
			}
		}
	}

	return 0;
}

提出情報

提出日時
問題 C - 最小カットと最大カット
ユーザ TSG09
言語 C++11 (GCC 4.9.2)
得点 100
コード長 1807 Byte
結果 AC
実行時間 172 ms
メモリ 8212 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 29
セット名 テストケース
All scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt, scrambled_25.txt, scrambled_26.txt, scrambled_27.txt, scrambled_28.txt
ケース名 結果 実行時間 メモリ
scrambled_00.txt AC 32 ms 3104 KiB
scrambled_01.txt AC 29 ms 3112 KiB
scrambled_02.txt AC 27 ms 3100 KiB
scrambled_03.txt AC 171 ms 6560 KiB
scrambled_04.txt AC 171 ms 6560 KiB
scrambled_05.txt AC 115 ms 5288 KiB
scrambled_06.txt AC 82 ms 4508 KiB
scrambled_07.txt AC 159 ms 6308 KiB
scrambled_08.txt AC 70 ms 4136 KiB
scrambled_09.txt AC 84 ms 4512 KiB
scrambled_10.txt AC 161 ms 8212 KiB
scrambled_11.txt AC 76 ms 5028 KiB
scrambled_12.txt AC 135 ms 7196 KiB
scrambled_13.txt AC 125 ms 6944 KiB
scrambled_14.txt AC 172 ms 6624 KiB
scrambled_15.txt AC 123 ms 5536 KiB
scrambled_16.txt AC 75 ms 4388 KiB
scrambled_17.txt AC 77 ms 4380 KiB
scrambled_18.txt AC 166 ms 6752 KiB
scrambled_19.txt AC 40 ms 3368 KiB
scrambled_20.txt AC 112 ms 5344 KiB
scrambled_21.txt AC 79 ms 4388 KiB
scrambled_22.txt AC 122 ms 5668 KiB
scrambled_23.txt AC 84 ms 4636 KiB
scrambled_24.txt AC 79 ms 4508 KiB
scrambled_25.txt AC 94 ms 4896 KiB
scrambled_26.txt AC 79 ms 4516 KiB
scrambled_27.txt AC 113 ms 5356 KiB
scrambled_28.txt AC 107 ms 5088 KiB