scoj2832: Mars city fzoj1462

#include<map>#include<string>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<queue>#include<vector>#include<iostream>#include<algorithm>#include<bitset>#include<climits>#include<list>#include<iomanip>#include<stack>#include<set>using namespace std;stack<int>sk;bool insk[5010];int step,dfn[5010],low[5010],belong[5010],tol;struct Edge{int to,next;}edge[100010];int head[5010],tail;void add(int from,int to){edge[tail].to=to;edge[tail].next=head[from];head[from]=tail++;}void dfs(int from){dfn[from]=low[from]=++step;sk.push(from);insk[from]=1;for(int i=head[from];i!=-1;i=edge[i].next){int to=edge[i].to;if(dfn[to]==0){dfs(to);low[from]=min(low[from],low[to]);}else if(insk[to])low[from]=min(low[from],dfn[to]);}if(dfn[from]==low[from]){int v;do{v=sk.top();sk.pop();insk[v]=0;belong[v]=tol;}while(v!=from);tol++;}}int cost[5010],in[5010],mn[5010];int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++){int v,c;scanf("%d%d",&v,&c);cost[v]=c;}tail=0;memset(head,-1,sizeof(head));while(m–){int u,v;scanf("%d%d",&u,&v);add(u,v);}tol=step=0;memset(dfn,0,sizeof(dfn));for(int i=1;i<=n;i++)if(dfn[i]==0)dfs(i);memset(mn,127,sizeof(mn));for(int i=1;i<=n;i++)mn[belong[i]]=min(mn[belong[i]],cost[i]);memset(in,0,sizeof(in));for(int i=1;i<=n;i++)for(int j=head[i];j!=-1;j=edge[j].next)if(belong[i]!=belong[edge[j].to])in[belong[edge[j].to]]++;int ans=0;for(int i=0;i<tol;i++)if(in[i]==0)ans+=mn[i];printf("%d\n",ans);}}

,你在潮湿的风中感受到了平稳的呼吸,多好听啊,

scoj2832: Mars city fzoj1462

相关文章:

你感兴趣的文章:

标签云: