[TIOJ] 1589. 蚯蚓之入侵雅勒問題 Athena

題目連結:http://tioj.infor.org/problems/1589
很明顯的可以知道到一個點的方法數,就是到所有連到他的人的方法數加起來,所以我們可以用類似DP的方法記錄從起點到每個點的方法數,而DP順序就按照拓樸排序就好了XD
#include <bits/stdc++.h>
using namespace std;
#define PB push_back
typedef long long lld;
const int N = 250 + 5;

vector<int> G[N];
lld way[N];
int in[N];

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	int vv, ee, m; cin>>vv>>ee>>m;
	for(int i=0;i<ee;i++){
		int u, v; cin>>u>>v;
		G[u].PB(v);
		in[v]++;
	}
	int st, ed; cin>>st>>ed;
	way[st]=1;
	queue<int> qq;
	for(int i=0;i<vv;i++) if(in[i]==0)
		qq.push(i);
	while(!qq.empty()){
		int u = qq.front(); qq.pop();
		for(auto v: G[u]){
			way[v] = (way[v]+way[u])%m;
			in[v]--;
			if(in[v]==0) qq.push(v);
		}
	}
	cout<<way[ed]<<'\n';
	return 0;
}

留言

這個網誌中的熱門文章

[TIOJ] 1094. C.幼稚國王的獎賞

[IOJ] 19. 啦啦啦

[Codeforces] 731F. Video Cards