제출 #1288586

#제출 시각아이디문제언어결과실행 시간메모리
1288586Faisal_SaqibPaths (BOI18_paths)C++20
100 / 100
268 ms154336 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int K=6,N=3e5+2;
int code[N];
int dp[K][N][32];
int main()
{
    ios::sync_with_stdio(0);
    cout.tie(0);cin.tie(0);
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        int c;
        cin>>c;
        c--;
        code[i]=(1<<c);
        // one vertex length path ending at i 
        dp[1][i][code[i]]=1;
    }
    vector<pair<int,int>> edg;
    for(int i=0;i<m;i++)
    {
        int x,y;
        cin>>x>>y;
        edg.push_back({x,y});
    }
    ll ans=0;
    for(int i=2;i<=k;i++)
    {
        for(auto yp:edg)
        {
            int x=yp.first,y=yp.second;
            for(int m=0;m<32;m++)
            {
                if((m&code[x])==0)
                    dp[i][x][m|code[x]]+=dp[i-1][y][m];
                if((m&code[y])==0)
                    dp[i][y][m|code[y]]+=dp[i-1][x][m];
            }
        }
        for(int v=1;v<=n;v++)
        {
            for(int x=0;x<32;x++)
            {
                ans+=dp[i][v][x];
            }
        }
    }
    cout<<ans<<endl;

    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...