Submission #927207

#TimeUsernameProblemLanguageResultExecution timeMemory
927207vjudge1Paths (BOI18_paths)C++17
100 / 100
189 ms249368 KiB
// By ObeliX #include <bits/stdc++.h> #pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") #include <unordered_map> #include <cstddef> #include <cassert> #include <bitset> #include <algorithm> #include <iostream> #include <iomanip> #include <cmath> #include <queue> #include <map> #include <set> using namespace std; const long long N = 3e5 + 5; const long long MOD = 1e9+7; const long long INF = 1e18; string al = "abcdefghijklmnopqrstuvwxyz"; long long n , m , k; long long col[N]; long long x[N] , y[N]; long long dp[N][103]; int main(){ //freopen( "cinema.in" , "r" , stdin ); //freopen( "cinema.out" , "w" , stdout ); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> k; for ( int i = 1 ; i <= n ; i++ ) { cin >> col[i]; dp[i][(1 << ( col[i] - 1 ))] = 1; } for ( int i = 1 ; i <= m ; i++ ) { cin >> x[i] >> y[i]; } for ( int mask = 1 ; mask <= ( 1 << k ) - 1 ; mask++ ) { for ( int i = 1 ; i <= m ; i++ ) { if ( ( mask & ( 1 << ( col[x[i]] - 1 ) ) ) == 1 << ( col[x[i]] - 1 ) && ( mask & ( 1 << ( col[y[i]] - 1 ) ) ) == 0 ) { dp[y[i]][mask|1<<(col[y[i]] - 1)] += dp[x[i]][mask]; } if ( ( mask & ( 1 << ( col[x[i]] - 1 ) ) ) == 0 && ( mask & ( 1 << ( col[y[i]] - 1 ) ) ) == 1 << ( col[y[i]] - 1 ) ) { dp[x[i]][mask|1<<(col[x[i]] - 1)] += dp[y[i]][mask]; } } } long long ans = 0; for ( int mask = 1 ; mask <= ( 1 << k ) - 1 ; mask++ ) { for ( int i = 1 ; i <= n ; i++ ) { ans += dp[i][mask]; } } cout << ans - n; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...