結果
| 問題 |
No.2301 Namorientation
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2023-05-12 22:54:24 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 428 ms / 3,000 ms |
| コード長 | 1,755 bytes |
| コンパイル時間 | 1,185 ms |
| コンパイル使用メモリ | 120,564 KB |
| 最終ジャッジ日時 | 2025-02-12 23:28:03 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <numeric>
#include <deque>
#include <complex>
#include <cassert>
using namespace std;
using ll = long long;
int N;
vector<bool> iscycle, visit;
vector<int> ans, a, b;
void dfs(vector<vector<pair<int, int>>> &E, int from, int p){
visit[from] = 1;
for(auto [to, i] : E[from]){
if (!iscycle[to]) continue;
if (p == to) continue;
if (a[i] == from && b[i] == to) ans[i] = 1;
else ans[i] = -1;
if (visit[to]){
for (int j=0; j<N; j++) cout << (ans[j] == 1 ? "->" : "<-") << endl;
exit(0);
}
dfs(E, to, from);
}
}
int main(){
int from;
cin >> N;
vector<int> deg(N);
a.resize(N); b.resize(N); ans.resize(N); visit.resize(N);
iscycle.resize(N, 1);
queue<int> que;
vector<vector<pair<int, int>>> E(N);
for (int i=0; i<N; i++){
cin >> a[i] >> b[i]; a[i]--; b[i]--;
E[a[i]].push_back({b[i], i});
E[b[i]].push_back({a[i], i});
deg[a[i]]++; deg[b[i]]++;
}
for (int i=0; i<N; i++){
if (deg[i] == 1){
que.push(i);
deg[i]--;
}
}
while(!que.empty()){
from = que.front();
iscycle[from] = 0;
que.pop();
for (auto [to, i] : E[from]){
if (iscycle[to] == 0) continue;
if (a[i] == from && b[i] == to) ans[i] = 1; //->
else ans[i] = -1; //<-
deg[to]--;
if (deg[to] == 1) que.push(to);
}
}
for (int i=0; i<N; i++){
if (iscycle[i]){
dfs(E, i, -1);
}
}
return 0;
}
srjywrdnprkt