답안 #135680

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
135680 2019-07-24T09:41:33 Z Plurm Paths (BOI18_paths) C++11
100 / 100
919 ms 25580 KB
#include <bits/stdc++.h>
using namespace std;
vector<int> g[300005];
long long dp[300005];
int col[300005];
vector<int> bckt[8];
int sel[8];
int n;
long long iteratePerm(int k, int c, int lv = 1){
    if(lv == c+1){
        for(int i = 1; i <= n; i++) dp[i] = 0ll;
        for(int u : bckt[sel[1]]) dp[u] = 1ll;
        for(int step = 2; step <= c; step++){
            for(int u : bckt[sel[step]]){
                for(int v : g[u]){
                    if(col[v] == sel[step-1]) dp[u] += dp[v];
                }
            }
        }
        long long sum = 0ll;
        for(int i = 1; i <= n; i++){
            if(col[i] == sel[c]){
                sum += dp[i];
            }
        }
        return sum;
    }else{
        long long sum = 0ll;
        for(int i = 1; i <= k; i++){
            bool ok = true;
            for(int j = 1; j < lv; j++){
                if(sel[j] == i) ok = false;
            }
            if(ok){
                sel[lv] = i;
                sum += iteratePerm(k, c, lv+1);
                sel[lv] = 0;
            }
        }
        return sum;
    }
}
int main(){
    int m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i = 1; i <= n; i++){
        scanf("%d",col+i);
        bckt[col[i]].push_back(i);
    }
    for(int i = 0; i < m; i++){
        int u,v;
        scanf("%d%d",&u,&v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    long long ans = 0ll;
    for(int i = 2; i <= k; i++){
        ans += iteratePerm(k,i);
    }
    printf("%lld\n",ans);
    return 0;
}

Compilation message

paths.cpp: In function 'int main()':
paths.cpp:45:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d",&n,&m,&k);
     ~~~~~^~~~~~~~~~~~~~~~~~~
paths.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",col+i);
         ~~~~~^~~~~~~~~~~~
paths.cpp:52:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&u,&v);
         ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 7416 KB Output is correct
2 Correct 8 ms 7344 KB Output is correct
3 Correct 8 ms 7364 KB Output is correct
4 Correct 8 ms 7416 KB Output is correct
5 Correct 10 ms 7408 KB Output is correct
6 Correct 10 ms 7460 KB Output is correct
7 Correct 8 ms 7416 KB Output is correct
8 Correct 8 ms 7416 KB Output is correct
9 Correct 8 ms 7416 KB Output is correct
10 Correct 8 ms 7416 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 13944 KB Output is correct
2 Correct 100 ms 13176 KB Output is correct
3 Correct 400 ms 24980 KB Output is correct
4 Correct 155 ms 15696 KB Output is correct
5 Correct 147 ms 15272 KB Output is correct
6 Correct 276 ms 21728 KB Output is correct
7 Correct 400 ms 25072 KB Output is correct
8 Correct 402 ms 25580 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 7416 KB Output is correct
2 Correct 8 ms 7344 KB Output is correct
3 Correct 8 ms 7364 KB Output is correct
4 Correct 8 ms 7416 KB Output is correct
5 Correct 10 ms 7408 KB Output is correct
6 Correct 10 ms 7460 KB Output is correct
7 Correct 8 ms 7416 KB Output is correct
8 Correct 8 ms 7416 KB Output is correct
9 Correct 8 ms 7416 KB Output is correct
10 Correct 8 ms 7416 KB Output is correct
11 Correct 120 ms 13944 KB Output is correct
12 Correct 100 ms 13176 KB Output is correct
13 Correct 400 ms 24980 KB Output is correct
14 Correct 155 ms 15696 KB Output is correct
15 Correct 147 ms 15272 KB Output is correct
16 Correct 276 ms 21728 KB Output is correct
17 Correct 400 ms 25072 KB Output is correct
18 Correct 402 ms 25580 KB Output is correct
19 Correct 125 ms 13960 KB Output is correct
20 Correct 100 ms 13176 KB Output is correct
21 Correct 400 ms 24832 KB Output is correct
22 Correct 164 ms 15676 KB Output is correct
23 Correct 142 ms 15344 KB Output is correct
24 Correct 279 ms 21692 KB Output is correct
25 Correct 400 ms 24920 KB Output is correct
26 Correct 385 ms 25580 KB Output is correct
27 Correct 169 ms 13304 KB Output is correct
28 Correct 217 ms 14684 KB Output is correct
29 Correct 919 ms 24956 KB Output is correct
30 Correct 509 ms 19504 KB Output is correct
31 Correct 561 ms 19744 KB Output is correct
32 Correct 916 ms 24964 KB Output is correct
33 Correct 8 ms 7416 KB Output is correct
34 Correct 8 ms 7416 KB Output is correct
35 Correct 8 ms 7416 KB Output is correct
36 Correct 9 ms 7416 KB Output is correct
37 Correct 8 ms 7416 KB Output is correct
38 Correct 8 ms 7416 KB Output is correct
39 Correct 8 ms 7420 KB Output is correct
40 Correct 8 ms 7416 KB Output is correct
41 Correct 8 ms 7416 KB Output is correct
42 Correct 8 ms 7416 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 7416 KB Output is correct
2 Correct 182 ms 9220 KB Output is correct
3 Correct 38 ms 9208 KB Output is correct
4 Correct 112 ms 13152 KB Output is correct
5 Correct 84 ms 13864 KB Output is correct
6 Correct 871 ms 13304 KB Output is correct
7 Correct 61 ms 9208 KB Output is correct
8 Correct 230 ms 13136 KB Output is correct
9 Correct 139 ms 13844 KB Output is correct
10 Correct 157 ms 13936 KB Output is correct
11 Correct 494 ms 11224 KB Output is correct
12 Correct 396 ms 12688 KB Output is correct
13 Correct 483 ms 11264 KB Output is correct
14 Correct 875 ms 13236 KB Output is correct
15 Correct 832 ms 13340 KB Output is correct
16 Correct 8 ms 7416 KB Output is correct
17 Correct 8 ms 7416 KB Output is correct
18 Correct 8 ms 7416 KB Output is correct
19 Correct 8 ms 7416 KB Output is correct
20 Correct 8 ms 7288 KB Output is correct
21 Correct 8 ms 7416 KB Output is correct
22 Correct 8 ms 7408 KB Output is correct
23 Correct 8 ms 7444 KB Output is correct
24 Correct 8 ms 7416 KB Output is correct
25 Correct 8 ms 7416 KB Output is correct