codeforces#244_div2_C Checkposts 强连通分量,Tarjan
来源:互联网 发布:免费下载涂涂乐软件 编辑:程序博客网 时间:2024/06/05 14:49
题目地址:cf#244_div2_C
额,每一个强连通分量里面放置一个police
Tarjan模板,还没理解透彻,先用着吧。
然后只用计算每一个强连通分量里面,权值等于最小权值的有多少个,乘起来就可以了。
代码:
#include<iostream>#include<vector>#include<stack>#include<cstring>#include<cstdio>using namespace std;const int maxn=10000000;const long long mod=1000000007;// scc Tarjan 模板vector<int> G[maxn];int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;stack<int> S;void dfs(int u ){ pre[u]=lowlink[u]=++dfs_clock; S.push(u); for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(!pre[v]) { dfs(v); lowlink[u]=min(lowlink[u],lowlink[v]); } else if(!sccno[v]) { lowlink[u]=min(lowlink[u],lowlink[v]); } } if(lowlink[u]==pre[u]) { scc_cnt++; for(;;) { int x=S.top(); S.pop(); sccno[x]=scc_cnt; if(x==u) break; } }}void find_scc(int n){ dfs_clock=scc_cnt=0; memset(sccno, 0, sizeof(sccno)); memset(pre, 0, sizeof(pre)); //memset(lowlink, 0, sizeof(lowlink)); for(int i=0;i<n;i++) { if(!pre[i]) dfs(i); }}int p[100005];int minCost[100005];long long minCnt[100005];int n,m;int main(){ cin>>n; for(int i=0;i<n;i++) { scanf("%d",&p[i]); } cin>>m; int a,b; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); G[a-1].push_back(b-1); } find_scc(n); for(int i=0;i<n;i++) sccno[i]--; for(int i=0;i<scc_cnt;i++) { minCost[i]=mod; } for(int i=0;i<n;i++) { minCost[sccno[i]]=min(minCost[sccno[i]],p[i]); } for(int i=0;i<n;i++) { if(p[i]==minCost[sccno[i]]) { minCnt[sccno[i]]++; } } long long all_cost=0; long long ans=1; for(int i=0;i<scc_cnt;i++) { all_cost+=minCost[i]; ans=(ans*minCnt[i])%mod; } cout<<all_cost<<' '<<ans<<endl; }
0 0
- codeforces#244_div2_C Checkposts 强连通分量,Tarjan
- Checkposts (codeforces #244dv2) 强连通分量 tarjan算法
- Codeforces 427C Checkposts (强连通分量 tarjan模板)
- Codeforces 427C Checkposts 强连通分量(tarjan)
- Codeforces Round #244 (Div. 2) 427C Checkposts (强连通分量 tarjan模板)
- cf 244c Checkposts 强连通分量
- Codeforces 427C Checkposts【Tarjan强连通+缩点染色】
- 强连通分量tarjan
- 强连通分量 Tarjan
- Tarjan强连通分量
- 强连通分量-Tarjan
- CF427C Checkposts(tarjan求强连通)
- Codeforces 427C - Checkposts 极大连通分量Tarjan算法模板题(STL实现)
- Codeforces#427C Checkposts(强联通Tarjan)
- codeforces 472C Checkposts 强连通
- tarjan求强连通分量
- 强连通分量 Tarjan算法
- POJ1236强连通分量tarjan
- The ML books recommended by Mike Jordan
- oracle中的多表查询方式
- iOS7下隐藏status bar的详细研究
- UVA 1372 - Log Jumping(推理)
- cocos2d-x移动淡出
- codeforces#244_div2_C Checkposts 强连通分量,Tarjan
- JBPM学习(六):详解流程图
- 今天开始,好好写博客,技术和生活
- POJ-3984-迷宫问题
- 虚拟机ODPS初体验
- Asp.NET MVC3 使用 SignalR 实现推送(接上)
- 如何在优酷评论中添加网页和视频时间点的超链接?
- 经典测试设计之方法脑图
- 最大公约数与最小公倍数