提出 #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 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| 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 |