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

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