Submission #2233003


Source Code Expand

#include <cstdio>

using namespace std;

const int Max_N(15);
typedef long long int LL;
const int MOD(1000000000 + 7);

inline void update(int &a, const int &b)
{
	((a += b) >= MOD) ? (a -= MOD) : 0;
}

inline int Mult(const int &a, const int &b)
{
	return (a * 1LL) * b % MOD;
}

int N, M, F[1 << Max_N], power[Max_N * Max_N], In[Max_N][1 << Max_N];
bool G[Max_N][Max_N];

//注意到,如果我们把所有点按照其SG值分层,那么一定会分成0 ~ max{SG(u)}这么多层
//每个点一定会向前面的每一层中的点都至少连一条边,同时每个点不会向同一层中的点连边 
//考虑状压dp计数,每次枚举SG值最小的一层。转移时1和2不在同一层 

void init()
{
	scanf("%d%d", &N, &M);
	for (int i = 1, s, t;i <= M;++i)
		scanf("%d%d", &s, &t), --s, --t, G[s][t] = true;
	power[0] = 1;
	for (int i = 1;i <= M;++i)
		power[i] = Mult(power[i - 1], 2);
	for (int t = 0;t <= N - 1;++t)
		for (int S = 0;S < (1 << N);++S)
			for (int s = 0;s <= N - 1;++s)
				if (S & (1 << s))
					In[t][S] += G[t][s];
}

void dp()
{
	F[0] = 1;
	for (int S = 1;S < (1 << N);++S)
		for (int S0 = S, val;S0;S0 = ((S0 - 1) & S))
		{
			if (((S0 & (1 << 0)) != 0) && ((S0 & (1 << 1)) != 0))
				continue;
			val = F[S - S0];
			for (int i = 0;i <= N - 1;++i)
				if ((S - S0) & (1 << i))
					val = Mult(val, ((power[In[i][S0]] - 1) % MOD + MOD) % MOD);
			for (int i = 0;i <= N - 1;++i)
				if (S0 & (1 << i))
					val = Mult(val, power[In[i][S - S0]]);
			update(F[S], val);
		}
	printf("%d", F[(1 << N) - 1]);
}

int main()
{
	init();
	dp();
	return 0;
}

Submission Info

Submission Time
Task F - Games on DAG
User Created_equal
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 1651 Byte
Status AC
Exec Time 1546 ms
Memory 2304 KB

Compile Error

./Main.cpp: In function ‘void init()’:
./Main.cpp:29:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &M);
                       ^
./Main.cpp:31:50: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &s, &t), --s, --t, G[s][t] = true;
                                                  ^

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 0 ms 128 KB
0_01.txt AC 0 ms 128 KB
0_02.txt AC 1 ms 128 KB
0_03.txt AC 1 ms 128 KB
1_00.txt AC 0 ms 128 KB
1_01.txt AC 1515 ms 2176 KB
1_02.txt AC 1515 ms 2176 KB
1_03.txt AC 1540 ms 2176 KB
1_04.txt AC 1537 ms 2176 KB
1_05.txt AC 1542 ms 2176 KB
1_06.txt AC 1531 ms 2176 KB
1_07.txt AC 1536 ms 2176 KB
1_08.txt AC 1540 ms 2176 KB
1_09.txt AC 1535 ms 2176 KB
1_10.txt AC 1537 ms 2176 KB
1_11.txt AC 1535 ms 2304 KB
1_12.txt AC 1546 ms 2176 KB
1_13.txt AC 1537 ms 2176 KB
1_14.txt AC 1538 ms 2176 KB
1_15.txt AC 1535 ms 2176 KB
1_16.txt AC 1534 ms 2176 KB
1_17.txt AC 1539 ms 2176 KB
1_18.txt AC 1528 ms 2176 KB
1_19.txt AC 1539 ms 2176 KB
1_20.txt AC 1514 ms 2176 KB
1_21.txt AC 5 ms 256 KB
1_22.txt AC 1514 ms 2176 KB
1_23.txt AC 1523 ms 2176 KB
1_24.txt AC 476 ms 1152 KB
1_25.txt AC 2 ms 256 KB
1_26.txt AC 1530 ms 2176 KB
1_27.txt AC 48 ms 384 KB
1_28.txt AC 1514 ms 2176 KB
1_29.txt AC 151 ms 640 KB
1_30.txt AC 48 ms 384 KB
1_31.txt AC 1536 ms 2176 KB
1_32.txt AC 152 ms 640 KB
1_33.txt AC 48 ms 384 KB
1_34.txt AC 476 ms 1152 KB
1_35.txt AC 151 ms 640 KB