缩点
2018-03-01 09:09
204 查看
#include<iostream> using namespace std; const int N=10005; const int M=100005; int n,m,head ,dfn ,low ,vis ,s ,top,cnt,ans,num; int Head ,w ,D ,F ,tot,in ; struct node{ int x,y,next; }e[M*2],ne[M*2]; void Tarjan(int u){ dfn[u]=low[u]=++cnt,vis[u]=1,s[++top]=u; for(int i=head[u],v;v=e[i].y,i;i=e[i].next) if(!dfn[v]){ Tarjan(v); low[u]=min(low[u],low[v]); } else if(vis[v]) low[u]=min(low[u],dfn[v]); if(low[u]==dfn[u]) while(int k=s[top--]){ vis[k]=0,F[k]=u; if(k==u) break; w[u]+=w[k]; } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=1,x,y;i<=m;i++){ cin>>x>>y; e[i].x=x,e[i].y=y,e[i].next=head[x],head[x]=i; } for(int i=1;i<=n;i++) if(!dfn[i]) Tarjan(i); for(int i=1,x,y;x=F[e[i].x],y=F[e[i].y],i<=m;i++) if(x!=y) ne[++tot].x=x,ne[tot].y=y,ne[tot].next=Head[x],Head[x]=tot,in[y]++; top=0; for(int i=1;i<=n;i++) if(F[i]==i&&!in[i]) s[++top]=i,D[i]=w[i]; while(top){ int k=s[top--]; for(int i=Head[k],v;v=ne[i].y,i;i=ne[i].next){ D[v]=max(D[v],D[k]+w[v]); if(--in[v]==0) s[++top]=v; } } for(int i=1;i<=n;i++) ans=max(ans,D[i]); cout<<ans; return 0; }
相关文章推荐
- hdu 3605-Escape(网络流SAP模板+缩点)
- poj1236(*强连通分量,缩点)
- [USACO5.3]校园网Network of Schools 缩点
- [HDU2767]Proving Equivalences(Tarjan缩点)
- bzoj 2427 HAOI 2010 软件安装 (dp+tarjan缩点)
- BZOJ 1093 浅谈tarjan缩点DAG最长路径即拓扑排序
- Codeforces 734E Anton and Tree【并查集缩点||DFS缩点+树的直径】
- Codeforces Round #267 (Div. 2) D. Fedor and Essay tarjan缩点
- [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)
- 【强连通分量缩点】poj 1236 Network of Schools
- Network of Schools POJ1236(tarjan缩点+强连通分量模板)
- 2017acm乌鲁木齐赛区网络赛F题tarjan缩点
- POJ 2186 Popular Cows (缩点)
- 【Tarjan缩点】PO3352 Road Construction
- [练习][poj2762]tarjan缩点 Going from u to v or from v to u?
- P3387 【模板】缩点
- [ 线段树 tarjan缩点 ] [ SNOI2017 ] BZOJ5017
- 2018年全国多校算法寒假训练营练习比赛(第四场)-E-通知小弟(强连通缩点)
- Codeforces 949C Data Center Maintenance 缩点+拓扑
- bzoj1051(缩点)