Task: | Road network |
Sender: | dsedov |
Submission time: | 2018-10-20 14:47:14 +0300 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.02 s | details |
#2 | ACCEPTED | 0.02 s | details |
#3 | ACCEPTED | 0.02 s | details |
#4 | ACCEPTED | 0.02 s | details |
#5 | ACCEPTED | 0.02 s | details |
#6 | ACCEPTED | 0.18 s | details |
#7 | ACCEPTED | 0.17 s | details |
#8 | ACCEPTED | 0.20 s | details |
#9 | ACCEPTED | 0.20 s | details |
#10 | ACCEPTED | 0.19 s | details |
#11 | ACCEPTED | 0.01 s | details |
Code
#include <stdio.h> #include <iostream> #include <memory.h> #include <string> #include <algorithm> #include <vector> #include <cmath> using namespace std; #define sqr(a) ((a) * (a)) #define pi 3.1415926535897932384626433832795 const double EPS = 1e-12; #define TASK "l" //#define CONTEST 1 #define MAXN 100005 #define MAXE 400005 int fst[MAXN], nxt[MAXE], en[MAXE]; int was[MAXN]; int cnt; int A[MAXE], B[MAXE]; int n, m; vector <int> ts; void AddEdge(int a, int b) { nxt[cnt] = fst[a]; fst[a] = cnt; en[cnt] = b; cnt++; } void dfs(int x) { was[x] = 1; for(int i = fst[x]; i != -1; i = nxt[i]) { if(was[en[i]] != 1) dfs(en[i]); } ts.push_back(x); } void Load() { cin >> n >> m; for(int i = 0; i < m; i++) { cin >> A[i] >> B[i]; AddEdge(B[i], A[i]); } } void Solve() { for(int i = 1; i <= n; i++) { if (was[i] != 1) dfs(i); } reverse(ts.begin(), ts.end()); cnt = 0; memset(fst, -1, sizeof(fst)); memset(was, 0, sizeof(was)); for(int i = 0; i < m; i++) AddEdge(A[i], B[i]); bool ok = true; int ind = 0; dfs(ts[0]); for(int i = 1; i <= n; i++) { if(was[i] != 1) { ok = false; ind = i; break; } } if (ok) cout << "YES" << endl; else { cout << "NO" << endl; cout << ts[0] << " " << ind << endl; } } int main() { #ifdef CONTEST freopen(TASK".in", "r", stdin); freopen(TASK".out", "w", stdout); #endif memset(fst, -1, sizeof(fst)); Load(); Solve(); return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
10 20 8 1 9 5 6 10 6 1 ... |
correct output |
---|
NO 7 1 |
user output |
---|
NO 7 1 |
Test 2
Verdict: ACCEPTED
input |
---|
10 20 2 10 10 6 8 5 3 8 ... |
correct output |
---|
NO 1 2 |
user output |
---|
NO 1 2 |
Test 3
Verdict: ACCEPTED
input |
---|
10 20 10 2 1 5 8 3 5 6 ... |
correct output |
---|
NO 9 1 |
user output |
---|
NO 9 1 |
Test 4
Verdict: ACCEPTED
input |
---|
10 20 9 6 10 4 7 2 10 5 ... |
correct output |
---|
NO 6 1 |
user output |
---|
NO 6 1 |
Test 5
Verdict: ACCEPTED
input |
---|
10 20 5 9 10 2 3 5 7 4 ... |
correct output |
---|
YES |
user output |
---|
YES |
Test 6
Verdict: ACCEPTED
input |
---|
100000 200000 64780 62469 32706 84268 37795 14893 23995 68041 ... |
correct output |
---|
NO 40590 1 |
user output |
---|
NO 40590 1 |
Test 7
Verdict: ACCEPTED
input |
---|
100000 200000 74725 92399 25141 53472 70762 85785 47091 71621 ... |
correct output |
---|
NO 96983 1 |
user output |
---|
NO 96983 1 |
Test 8
Verdict: ACCEPTED
input |
---|
100000 200000 50342 88741 55031 42206 24989 54546 666 39964 ... |
correct output |
---|
NO 1 68638 |
user output |
---|
NO 1 68638 |
Test 9
Verdict: ACCEPTED
input |
---|
100000 200000 51243 54643 90493 3012 62110 9430 5809 45601 ... |
correct output |
---|
NO 48024 1 |
user output |
---|
NO 48024 1 |
Test 10
Verdict: ACCEPTED
input |
---|
100000 200000 5524 49109 87052 72192 46434 18442 67624 38661 ... |
correct output |
---|
YES |
user output |
---|
YES |
Test 11
Verdict: ACCEPTED
input |
---|
7 10 1 2 2 1 1 4 5 4 ... |
correct output |
---|
NO 2 3 |
user output |
---|
NO 4 1 |