제출 #1269136

#제출 시각아이디문제언어결과실행 시간메모리
1269136vukhacminhPaths (BOI18_paths)C++20
100 / 100
262 ms93876 KiB
/**
*    Author :  Vu Khac Minh
**/
#include <bits/stdc++.h>
#define ll long long
#define BIT(x,i) (((x)>>(i))&(1))
#define MASK(x) ((1ll)<<(x))
using namespace std;
const int maxn = 3e5 + 5;
const int mod = 1e9+7;
ll res, n,k,m,a[maxn],dp[maxn][MASK(5)];
vector<int> adj[maxn];
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m>>k;
    for(int i =1;i<=n;i++)
    {
        cin>>a[i];
        a[i]--;
    }
    for(int i = 1;i<=m;i++)
    {
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    for(int i = 1;i<=n;i++)
        dp[i][MASK(a[i])] = 1;
    for(int mask = 1;mask<MASK(k);mask++)
    {
        for(int u = 1;u<=n;u++)
        {
            for(auto v : adj[u])
            if(!BIT(mask,a[v]))
            {
                dp[v][mask|MASK(a[v])] = ( dp[v][mask|MASK(a[v])] + dp[u][mask]);
            }
            if(__builtin_popcount(mask) > 1)res = (res +dp[u][mask]);
        }
    }
    cout<<res<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...