CSES - E4590 2018 6 - Results
Submission details
Task:Road network
Sender:jong
Submission time:2018-10-20 15:05:43 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.18 sdetails
#7ACCEPTED0.17 sdetails
#8ACCEPTED0.16 sdetails
#9ACCEPTED0.18 sdetails
#10ACCEPTED0.18 sdetails
#11ACCEPTED0.02 sdetails

Code

#include <iostream>
#include <vector>

using namespace std;

struct node {
	vector<int> out;
	vector<int> in;
};

void explore(int ni, node *nodes, bool *visited, bool reversed) {
	visited[ni] = true;
	int k = reversed ? nodes[ni].in.size() : nodes[ni].out.size();
	for (int i=0; i<k; ++i) {
		int nbr = reversed ? nodes[ni].in[i] : nodes[ni].out[i];
		if (!visited[nbr]) explore(nbr, nodes, visited, reversed);
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int n, m;
	cin >> n; cin >> m;

	node nodes[n];
	bool visited[n];
	for (int i=0; i<n; ++i) visited[i] = false;

	int a, b;
	for (int i=0; i<m; ++i) {
		cin >> a; cin >> b;
		nodes[a-1].out.push_back(b-1);
		nodes[b-1].in.push_back(a-1);
	}

	explore(0, nodes, visited, false);
	for (int i=0; i<n; ++i) {
		if (!visited[i]) {
			cout << "NO\n" << 1 << " " << (i+1) << "\n";
			return 0;
		}
	}

	for (int i=0; i<n; ++i) visited[i] = false;
	explore(0, nodes, visited, true);
	for (int i=0; i<n; ++i) {
		if (!visited[i]) {
			cout << "NO\n" << (i+1) << " " << "1\n";
			return 0;
		}
	}

	cout << "YES\n";

}

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
1 3