Luogu P4017 鏈€澶ч鐗╅摼璁℃暟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu P4017 鏈€澶ч鐗╅摼璁℃暟相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/max' title='max'>max
efi define getc get inf str pos ret鎬濊矾
杩欎釜棰樹竴鐪嬪埌浠€涔堜粠鍏ュ害涓洪浂鐨勭偣鍒板嚭搴︿负闆剁殑鐐癸紝寰堝鏄撴兂鍒皌oposort銆傝繖涓灏辨槸鏈€鍩烘湰鐨則oposort+DAG DP锛屾病鍟ュソ璇寸殑鈥︹€?/p>
涓昏娉ㄦ剰涓€瀹氭槸閬囧埌鍑哄害涓?鐨勭偣锛屼竴鏉¢鐗╅摼鎵嶈兘绠楁槸缁撴潫锛屾墠鑳藉绱姞绛旀銆?/p>
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define MAXN 5010
#define MAXM 500010
#define MOD 80112002
int n, m, res;
int head[MAXN], cnt;
int in[MAXN], out[MAXN];
int f[MAXN];
struct node{
int from, nxt, to;
} edge[MAXM];
inline int read(void){
int f = 1, x = 0;char ch;
do{ch = getchar();if(ch==鈥?鈥?f = -1;} while (ch < 鈥?鈥?|| ch > 鈥?鈥?;
do{ x = (x << 1) +(x << 3) + ch - 鈥?鈥?ch = getchar();} while (ch >= 鈥?鈥?&& ch <= 鈥?鈥?;
return f * x;
}
inline void add_edge(int x,int y){
++cnt;
edge[cnt].nxt = head[x];
edge[cnt].from = x;
edge[cnt].to = y;
head[x] = cnt;
return;
}
std::queue<int> Q;
inline void _init(void){
for (int i = 1; i <= n;++i){
if(!in[i]) Q.push(i), f[i] = 1;
}
return;
}
void toposort(void){
_init();
while(!Q.empty()){
int u = Q.front();
Q.pop();
for (int i = head[u]; i;i=edge[i].nxt){
int v = edge[i].to;
f[v] = (f[v] * 1ll + f[u] * 1ll) % MOD;
--in[v];
if(!in[v]){
if(!out[v])
res = (res + f[v]) % MOD;
else Q.push(v);
}
}
}
return;
}
int main(void){
n = read(), m = read();
for (int i = 1; i <= m;++i){
int u = read(), v = read();
add_edge(u, v);
++in[v], ++out[u];
}
toposort();
printf("%d
", res);
return 0;
}
以上是关于Luogu P4017 鏈€澶ч鐗╅摼璁℃暟的主要内容,如果未能解决你的问题,请参考以下文章
鍙风О鈥滅璋峰吇鑰侀櫌鈥濈殑Oracle澶ф壂鑽″紡瑁佸憳: 婀惧尯鑰佸憳宸?0鍒嗛挓鍐呰鎵湴鍑洪棬
[Luogu] CF557C Arthur and Table