CSES - COCI 2006/2007 #3 - Results
Submission details
Task:Bicikli
Sender:henrikaalto
Submission time:2019-07-24 15:28:00 +0300
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.02 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.07 sdetails
#10ACCEPTED0.06 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
#define MAXN 10100
vector<int> v[MAXN], rev[MAXN], loops;
int p[MAXN], reachable[MAXN];
void create_topo(int s)
{
	if (p[s] == 1) {
		loops.push_back(s);
		return;
	}
	if (p[s] == 2) return;
	p[s] = 1;
	for (int u : v[s]) {
		create_topo(u);
	}
	p[s] = 2;
}
void reverse_trav(int s)
{
	if (reachable[s]) return;
	reachable[s] = 1;
	for (int u : rev[s]) {
		reverse_trav(u);
	}
}
const long mod = (long) 1e11;
int pad = 0;
int visited[MAXN];
long res[MAXN];
long calc(int s)
{
	if (s == 0) return 1;
	if (visited[s]) return res[s];
	visited[s] = 1;
	long o = 0;
	for (int u : rev[s]) {
		o += calc(u);
		if (o >= mod) pad = 1;
		o %= mod;
	}
	return res[s] = (o % mod);
}
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < m; ++i) {
		int a, b;
		cin >> a >> b;
		--a; --b;
		v[a].push_back(b);
		rev[b].push_back(a);
	}
	int ok = 1;
	create_topo(0);
	reverse_trav(1);
	for (int u : loops) {
		if (reachable[u]) {
			ok = 0;
		}
	}
	if (!ok) {
		cout << "inf\n";
		return 0;
	}
	long z = calc(1);
	if (z > (long) 1e9) pad = 1;
	z %= (long) 1e9;
	string b = to_string(z);
	if (pad && b.size() != 9) b = string(9 - b.size(), '0') + b;
	cout << b << "\n";
}

Test details

Test 1

Verdict: ACCEPTED

input
8 14
6 7
6 8
7 5
5 2
...

correct output
6

user output
6

Test 2

Verdict: ACCEPTED

input
10 23
9 7
3 5
7 3
6 3
...

correct output
34

user output
34

Test 3

Verdict: ACCEPTED

input
20 33
10 15
15 17
8 18
12 5
...

correct output
9

user output
9

Test 4

Verdict: ACCEPTED

input
20 32
3 12
4 3
16 14
18 6
...

correct output
12

user output
12

Test 5

Verdict: ACCEPTED

input
100 2515
81 85
44 37
96 24
76 47
...

correct output
045764845

user output
045764845

Test 6

Verdict: ACCEPTED

input
2000 17506
773 455
197 97
1919 1803
547 1424
...

correct output
158163175

user output
158163175

Test 7

Verdict: ACCEPTED

input
1000 2302
466 579
722 97
665 207
164 595
...

correct output
000000004

user output
000000004

Test 8

Verdict: ACCEPTED

input
5000 94881
449 897
2606 1774
3582 4224
3404 3796
...

correct output
735358770

user output
735358770

Test 9

Verdict: ACCEPTED

input
10000 99361
8997 968
8498 5208
6917 736
7724 451
...

correct output
526200210

user output
526200210

Test 10

Verdict: ACCEPTED

input
10000 89720
3708 9853
7 5030
1366 275
8433 4123
...

correct output
460441436

user output
460441436