Submission #2748633


Source Code Expand

#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <vector>
#include <utility>
#include <numeric>
#include <string>
#include <set>
#include <map>
#include <tuple>
#include <queue>
#include <stack>
#define rep(i, a, n) for(int (i) = (int)(a);(i) < (int)(n);++(i))
#define repe(i, a, n) for(int (i) = (int)(a);(i) <= (int)(n);++(i))
#define repr(i, a, n) for(int (i) = (int)(a);(i) > (int)(n);--(i))
#define reper(i, a, n) for(int (i) = (int)(a);(i) >= (int)(n);--(i))
#define SIZE(x) ((int)(x).size())
#define ALL(x) (x).begin(), (x).end()
#define RNG(x, n) &x[0], &x[n]
#define YES cout << "YES" << endl
#define NO cout << "NO" << endl
#define Yes cout << "Yes" << endl
#define No cout << "No" << endl
#define yes cout << "yes" << endl;
#define no cout << "no" << endl;
#define pb push_back
#define EPS (1e-20)
#define INF 2147483647
#define MOD 1000000007
using llint = long long;
using VI = std::vector<int>;
using PII = std::pair<int, int>;
using SI = std::set<int>;
using MII = std::map<int, int>;
using TIII = std::tuple<int, int, int>;
using namespace std;


int N;
int a, b;
int M;
VI g[110];
VI dag[110];
VI tpDAG;
int dp[110];


void makeDAG(){
	int d[110] = {};
	bool u[110] = {};
	queue<int> q;
	d[a] = 0;
	u[a] = true;
	q.push(a);
	while(!q.empty()){
		int pn = q.front();
		q.pop();
		for(int nn : g[pn])
			if(!u[nn]) d[nn] = d[pn] + 1, u[nn] = true, q.push(nn);
	}
	rep(i, 0, N)
		for(int n : g[i])
			if(d[i]+1 == d[n]) dag[i].pb(n);
}


void tpSort(){
	int eCnt[110] = {};
	rep(i, 0, N)
		for(int n : dag[i]) eCnt[n]++;
	stack<int> s;
	rep(i, 0, N)
		if(!eCnt[i]) s.push(i);
	while(!s.empty()){
		tpDAG.pb(s.top());
		s.pop();
		for(int n : dag[tpDAG.back()]){
			eCnt[n]--;
			if(!eCnt[n]) s.push(n);
		}
	}
}


void makeDP(){
	for(int n : dag[a]) dp[n] = 1;
	rep(i, 1, N)
		for(int n : dag[tpDAG[i]])
			(dp[n]+=(dp[tpDAG[i]]%MOD))%=MOD;
}


signed main(){
	cin >> N;
	cin >> a >> b, a--, b--;
	cin >> M;
	rep(i, 0, M){
		int x, y;
		cin >> x >> y;
		g[--x].pb(--y);
		g[y].pb(x);
	}

	makeDAG();
	tpSort();
	makeDP();

	cout << dp[b] << endl;

	return 0;
}

Submission Info

Submission Time
Task C - 正直者の高橋くん
User AqFv
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2222 Byte
Status AC
Exec Time 1 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 32
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt
All subtask0_sample_01.txt, subtask0_sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask1_30.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 1 ms 256 KB
subtask0_sample_02.txt AC 1 ms 256 KB
subtask1_01.txt AC 1 ms 256 KB
subtask1_02.txt AC 1 ms 256 KB
subtask1_03.txt AC 1 ms 256 KB
subtask1_04.txt AC 1 ms 256 KB
subtask1_05.txt AC 1 ms 256 KB
subtask1_06.txt AC 1 ms 256 KB
subtask1_07.txt AC 1 ms 256 KB
subtask1_08.txt AC 1 ms 256 KB
subtask1_09.txt AC 1 ms 256 KB
subtask1_10.txt AC 1 ms 256 KB
subtask1_11.txt AC 1 ms 256 KB
subtask1_12.txt AC 1 ms 256 KB
subtask1_13.txt AC 1 ms 256 KB
subtask1_14.txt AC 1 ms 256 KB
subtask1_15.txt AC 1 ms 256 KB
subtask1_16.txt AC 1 ms 256 KB
subtask1_17.txt AC 1 ms 256 KB
subtask1_18.txt AC 1 ms 256 KB
subtask1_19.txt AC 1 ms 256 KB
subtask1_20.txt AC 1 ms 256 KB
subtask1_21.txt AC 1 ms 256 KB
subtask1_22.txt AC 1 ms 256 KB
subtask1_23.txt AC 1 ms 256 KB
subtask1_24.txt AC 1 ms 256 KB
subtask1_25.txt AC 1 ms 256 KB
subtask1_26.txt AC 1 ms 256 KB
subtask1_27.txt AC 1 ms 256 KB
subtask1_28.txt AC 1 ms 256 KB
subtask1_29.txt AC 1 ms 256 KB
subtask1_30.txt AC 1 ms 256 KB