Submission #1611915


Source Code Expand

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cassert>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <iostream>
#include <map>
#include <set>
#include <cassert>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
int dp[(1<<15)+5][16],n,m;
int c[15][(1<<15)],u[15][15];
ll *zip[(1<<15)];
int main(){
	cin>>n>>m;
	rep(i,m){
		int a,b;cin>>a>>b;
		a--; b--;
		u[a][b] = 1;
	}
	rep(i,n)rep(j,(1<<n)){
		if(((j>>i)&1)) continue;
		rep(k,n){
			if(((j>>k)&1)) if(u[i][k]) c[i][j]++;
		}
	}
	//cout<<c[0][2]<<" " <<c[1][1]<<endl;
	dp[0][0] = 1; ll ret=0;
	rep(i,(1<<n)) zip[i] = new ll[(1<<__builtin_popcount(i))];
	for(int t=0;t<n;t++){
		for(int mask=0;mask<(1<<n);mask++){
			int x = mask,num = 0;
			while(1){
				//dp[x][t] -> dp[mask][t+1]
				int y = mask-x,z = (1<<n)-1-mask;
				ll val = 1;
				if(!t){
	    				rep(i,n){
	    					if(((x>>i)&1)){
	    						val = val*(1LL<<c[i][y])%mod;
	    					}
	    					else if(((z>>i)&1)){
	    						val = val*((1LL<<c[i][y])-1LL)%mod;
	    					}
	    				}
	    				zip[mask][num++] = val;
				}else val = zip[mask][num++];
				
				if(y%4 != 3){
				    dp[mask][t+1] = dp[mask][t+1]+dp[x][t]*val%mod;
				    dp[mask][t+1]%=mod;
				    if(mask == (1<<n)-1 && y) ret+=dp[x][t]*val%mod;
				}
				if(x == 0) break;
				x = (x-1)&mask;
				//cout<<x<<" " <<mask<<endl;
			}
		}
	}
	cout<<ret%mod<<endl;
}

Submission Info

Submission Time
Task F - Games on DAG
User IH19980412
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 2074 Byte
Status AC
Exec Time 2903 ms
Memory 118912 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1600 / 1600
Status
AC × 4
AC × 40
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt
Case Name Status Exec Time Memory
0_00.txt AC 2 ms 2304 KB
0_01.txt AC 2 ms 2304 KB
0_02.txt AC 2 ms 2304 KB
0_03.txt AC 2 ms 2304 KB
1_00.txt AC 2 ms 2304 KB
1_01.txt AC 2758 ms 115456 KB
1_02.txt AC 2749 ms 115328 KB
1_03.txt AC 2783 ms 116864 KB
1_04.txt AC 2781 ms 116864 KB
1_05.txt AC 2800 ms 116864 KB
1_06.txt AC 2778 ms 116864 KB
1_07.txt AC 2779 ms 118912 KB
1_08.txt AC 2783 ms 116992 KB
1_09.txt AC 2789 ms 116864 KB
1_10.txt AC 2779 ms 118912 KB
1_11.txt AC 2778 ms 116864 KB
1_12.txt AC 2784 ms 116992 KB
1_13.txt AC 2781 ms 118912 KB
1_14.txt AC 2779 ms 116864 KB
1_15.txt AC 2780 ms 116864 KB
1_16.txt AC 2795 ms 118912 KB
1_17.txt AC 2786 ms 116864 KB
1_18.txt AC 2790 ms 116864 KB
1_19.txt AC 2802 ms 118912 KB
1_20.txt AC 2786 ms 116480 KB
1_21.txt AC 9 ms 2816 KB
1_22.txt AC 2802 ms 116864 KB
1_23.txt AC 2903 ms 118912 KB
1_24.txt AC 895 ms 40704 KB
1_25.txt AC 4 ms 2432 KB
1_26.txt AC 2897 ms 116864 KB
1_27.txt AC 85 ms 6784 KB
1_28.txt AC 2809 ms 115968 KB
1_29.txt AC 265 ms 15360 KB
1_30.txt AC 81 ms 6656 KB
1_31.txt AC 2780 ms 116864 KB
1_32.txt AC 265 ms 15360 KB
1_33.txt AC 82 ms 6784 KB
1_34.txt AC 859 ms 40704 KB
1_35.txt AC 264 ms 15360 KB