Submission #1629409


Source Code Expand

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<bitset>
#include<map>

#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

typedef long long LL;
typedef double db;

int get(){
	char ch;
	while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
	if (ch=='-'){
		int s=0;
		while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
		return -s;
	}
	int s=ch-'0';
	while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
	return s;
}

const int N = 17;
const int L = 32800;
const int mo = 1e9+7;

LL f[N][L];
int t[L];
int co[N],cu[N];
int n,m;
LL c0[N],c1[N];
LL mi[300];
int cnt[L];
int s1[14350000],s2[14350000];
int it[N],sit[L];

inline LL add(LL x,LL y){
	return x+y>=mo?x+y-mo:x+y;
}

inline int trs(int x,int y){
	int ct=0;
	fo(i,0,n-1){
		ct=ct*3;
		if ((x&(1<<i))>0)ct=ct+1;
		if ((y&(1<<i))>0)ct=ct+2;
	}
	return ct;
}

int main(){
	n=get();m=get();
	fo(i,1,m){
		int x=get(),y=get();
		co[y]|=(1<<(x-1));
		cu[x]|=(1<<(y-1));
		it[y]++;
	}
	mi[0]=1;
	fo(i,1,m)mi[i]=mi[i-1]*2%mo;
	fo(i,1,(1<<n)-1)cnt[i]=cnt[i-(i&-i)]+1;
	fo(i,0,(1<<n)-1){
		for(int x=i;x<(1<<n);x=((x+1)|i)){
			int x_=x^i;
			int now=trs(i,x_);
			//s1
			fo(t,1,n)
			if (((1<<(t-1))&i)>0)s1[now]=s1[now]+cnt[cu[t]&x_];
			s1[now]=mi[s1[now]];
			//s2
			s2[now]=1;
			fo(t,1,n)
			if (((1<<(t-1))&x_)>0)s2[now]=1ll*s2[now]*(mi[cnt[cu[t]&i]]+mo-1)%mo;
		}
		fo(x,1,n)
		if ((i&(1<<(x-1)))>0)sit[i]+=it[x];
	}
	
	LL ans=0;
	fo(i,1,(1<<n)-1){
		f[0][i]=s2[trs(i,((1<<n)-1)^i)];
		if ((i&3)==3)ans=add(ans,f[0][i]*mi[m-sit[i]]%mo);	
	}
	fo(i,0,(1<<n)-1)
	for(int x=(i+1)|i;x<(1<<n);x=((x+1)|i)){
		int x_=i^x;
		int t1=trs(i,x_),t2=trs(x_,((1<<n)-1)^x);
		fo(lev,0,n-1)
		if (f[lev][i]){
			LL tmp=f[lev][i]*s1[t1]%mo*s2[t2]%mo;
			f[lev+1][x]=add(f[lev+1][x],tmp);
			if ((i&3)==0&&(x&3)==3)ans=add(ans,tmp*mi[m-sit[x]]%mo);
		}
	}
	ans=(mi[m]+mo-ans)%mo;
	printf("%lld\n",ans);
	return 0;
}

Submission Info

Submission Time
Task F - Games on DAG
User samjia2000
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 2067 Byte
Status AC
Exec Time 4923 ms
Memory 116992 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 3 ms 6400 KB
0_01.txt AC 3 ms 6400 KB
0_02.txt AC 3 ms 6400 KB
0_03.txt AC 3 ms 6400 KB
1_00.txt AC 3 ms 6400 KB
1_01.txt AC 4379 ms 114944 KB
1_02.txt AC 4391 ms 114944 KB
1_03.txt AC 4854 ms 116992 KB
1_04.txt AC 4838 ms 116992 KB
1_05.txt AC 4855 ms 116992 KB
1_06.txt AC 4563 ms 116992 KB
1_07.txt AC 4792 ms 116992 KB
1_08.txt AC 4874 ms 116992 KB
1_09.txt AC 4813 ms 116992 KB
1_10.txt AC 4837 ms 116992 KB
1_11.txt AC 4710 ms 116992 KB
1_12.txt AC 4846 ms 116992 KB
1_13.txt AC 4908 ms 116992 KB
1_14.txt AC 4853 ms 116992 KB
1_15.txt AC 4756 ms 116992 KB
1_16.txt AC 4698 ms 116992 KB
1_17.txt AC 4923 ms 116992 KB
1_18.txt AC 4573 ms 116992 KB
1_19.txt AC 4863 ms 116992 KB
1_20.txt AC 4374 ms 114944 KB
1_21.txt AC 13 ms 8704 KB
1_22.txt AC 4485 ms 114944 KB
1_23.txt AC 4524 ms 116992 KB
1_24.txt AC 1370 ms 45184 KB
1_25.txt AC 6 ms 6528 KB
1_26.txt AC 4660 ms 116992 KB
1_27.txt AC 111 ms 12416 KB
1_28.txt AC 4362 ms 114944 KB
1_29.txt AC 454 ms 22656 KB
1_30.txt AC 105 ms 12416 KB
1_31.txt AC 4807 ms 116992 KB
1_32.txt AC 443 ms 22656 KB
1_33.txt AC 109 ms 12416 KB
1_34.txt AC 1415 ms 45184 KB
1_35.txt AC 441 ms 20608 KB