洛谷p3183食物链

来源:互联网 发布:linux snmp mib库 编辑:程序博客网 时间:2024/06/10 00:15

这个题……比赛的时候沙茶了一把,没打出来,考完后略作改动就过了【流泪】

这个题……我真是用拓扑排序做的……没用什么奇奇怪怪的dp,dfs,稍微用了点小技巧qwq,对到达某个点的方案数做了下记录下面放代码

#include<iostream>#include<cstdio>#include<vector>#include<queue>using namespace std;int n,m,x,y,ans;vector<int>mmp[100010];int jin[100010],chu[100010],ci[100010];inline void build(int f,int l)//inline真的有用!相信我,我用它拯救了个tle的程序{mmp[f].push_back(l);return;}queue<int>qwq;int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d",&x,&y),jin[y]++,chu[x]++,build(x,y);for(int i=1;i<=n;i++)if(!jin[i]&&chu[i])qwq.push(i),ci[i]=1;while(!qwq.empty()){int qaq=qwq.front();if(!chu[qaq])ans+=ci[qaq];qwq.pop();for(int i=0;i<mmp[qaq].size();i++){int t=mmp[qaq][i];jin[t]--,ci[t]+=ci[qaq];if(!jin[t])qwq.push(t);}}cout<<ans;}

原创粉丝点击