CSES - Leirikisa 4 - Results
Submission details
Task:paleta
Sender:ollpu
Submission time:2016-08-01 17:59:58 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#1ACCEPTED0.05 sdetails
#20.05 sdetails
#30.06 sdetails
#40.06 sdetails
#50.06 sdetails
#60.06 sdetails
#70.07 sdetails
#80.06 sdetails
#90.06 sdetails
#100.05 sdetails
#110.06 sdetails
#120.05 sdetails
#13ACCEPTED0.06 sdetails
#140.07 sdetails
#150.06 sdetails
#160.07 sdetails
#170.06 sdetails
#180.08 sdetails
#190.06 sdetails
#200.46 sdetails
#210.06 sdetails
#220.45 sdetails
#23ACCEPTED0.05 sdetails

Code

#include <iostream>
#include <vector>
using namespace std;
int n, k, vi[1000000];
bool z[1000000];
vector<int> v[1000000];
long sum = 1;
void h(int i, int options) {
	if (z[i]) return;
	z[i] = 1;
	sum *= (long) options;
	sum %= 1000000007;
	int noptions = 0;
	for (int j : v[i]) {
		noptions += !z[j];
	}
	for (int j : v[i]) {
		h(j, k-noptions);
	}
}
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> k;
	vector<int> top;
	for (int i = 1; i <= n; ++i) {
		int c;
		cin >> c;
		vi[i-1] = c-1;
		if (c == i) {
			top.push_back(i);
		} else {
			v[c-1].push_back(i-1);
		}
	}
	for (int i : top) {
		h(i, k);
	}
	for (int i = 0; i < n; ++i) {
		h(i, k);
	}
	cout << max(sum, (long)0);
}

Test details

Test 1

Verdict: ACCEPTED

input
2 3
2 1

correct output
6

user output
6

Test 2

Verdict:

input
3 4
2 3 1

correct output
24

user output
36

Test 3

Verdict:

input
3 4
2 1 1

correct output
36

user output
16

Test 4

Verdict:

input
10 4
3 10 7 9 1 4 8 5 6 2

correct output
69120

user output
139968

Test 5

Verdict:

input
10 2
9 4 2 5 8 10 6 3 1 7

correct output
0

user output
8

Test 6

Verdict:

input
20 6
15 16 6 12 8 2 11 4 14 17 8 11...

correct output
749062329

user output
119721309

Test 7

Verdict:

input
10 3
10 7 6 5 9 2 3 6 4 1

correct output
1296

user output
864

Test 8

Verdict:

input
100 6
70 62 57 34 87 73 81 45 11 25 ...

correct output
170647921

user output
483496880

Test 9

Verdict:

input
5 7
2 3 4 5 5

correct output
9072

user output
117649

Test 10

Verdict:

input
200 13
88 97 79 1 184 104 127 159 157...

correct output
798243726

user output
735501845

Test 11

Verdict:

input
5 2
1 2 3 4 5

correct output
32

user output
64

Test 12

Verdict:

input
1000 17
321 466 231 684 53 480 95 61 5...

correct output
799039396

user output
955892077

Test 13

Verdict: ACCEPTED

input
5 1
1 2 3 4 5

correct output
1

user output
1

Test 14

Verdict:

input
2000 27
545 945 734 555 1974 1119 694 ...

correct output
87259530

user output
4564778

Test 15

Verdict:

input
5 4
2 3 4 5 1

correct output
240

user output
324

Test 16

Verdict:

input
20000 207
4712 13482 9751 10677 2744 326...

correct output
920405949

user output
704542997

Test 17

Verdict:

input
10 9
2 3 4 5 6 7 8 9 10 1

correct output
73741825

user output
207959545

Test 18

Verdict:

input
100000 137
35216 66352 76631 39149 68563 ...

correct output
873619169

user output
174219693

Test 19

Verdict:

input
5 2
2 1 3 4 5

correct output
16

user output
32

Test 20

Verdict:

input
1000000 1337
157667 207184 572776 559466 52...

correct output
815275681

user output
104058228

Test 21

Verdict:

input
5 2
2 3 4 5 1

correct output
0

user output
2

Test 22

Verdict:

input
1000000 137037
302969 577811 4130 64 558319 7...

correct output
387136640

user output
918029237

Test 23

Verdict: ACCEPTED

input
6 2
2 3 4 5 6 1

correct output
2

user output
2