CodeForces 427C Checkposts (强连通分量Tarjan模板题)
题目链接:点击打开链接
题意:n个点m条路,要设置最少的站点,只需要在每个强连通分量中选一个站点就好,要使费用最少只需要在每个强连通分量中
取权值最小的即可。为了写这道题,看了一下午的tarjan算法,其实还是比较好理解的,自己重新写了两遍这道题都没啥大问题,
这一下午过得觉得很值得。
看了几遍这个博客,感觉写的十分详细,留下链接方便自己以后回来看点击打开链接
#include<vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const int maxn = 1e5 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3fffffff;
typedef long long ll;
int a[maxn];
vector<int> G[maxn];
stack<int> st;
bool inst[maxn];
int n, m, index;
ll ans, tot;
int dfn[maxn], low[maxn];
void tarjan(int u)
{dfn[u] = low[u] = ++index;st.push(u);inst[u] = true;int len = G[u].size();for(int i = 0; i < len; i++){int v = G[u][i];if(!dfn[v]){tarjan(v);low[u] = min(low[u], low[v]);}else if(inst[v])low[u] = min(low[u], dfn[v]);}if(dfn[u] == low[u]){int mi = INF, cnt = 0, v;do{v = st.top();st.pop();inst[v] = false;if(a[v] < mi){mi = a[v];cnt = 0;}if(a[v] == mi)cnt++;}while(u != v);ans += mi;tot = ((tot % MOD) * (cnt % MOD)) % MOD;}
}
int main()
{while(~scanf("%d",&n)){memset(inst, false, sizeof(inst));memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));for(int i = 1; i <= n; i++)scanf("%d",&a[i]);scanf("%d",&m);int u, v;while(m--){scanf("%d%d",&u,&v);G[u].push_back(v);}ans = index = 0;tot = 1;for(int i = 1; i <= n; i++){if(!dfn[i])tarjan(i);}printf("%I64d %I64d\n",ans, tot);}return 0;
}
CodeForces 427C Checkposts (强连通分量Tarjan模板题)相关推荐
- HDU-1269 Tarjan求强连通分量,模板题
HDU 1269 题意:n个点m条单向边,问任意两个点是否连通. 总结:参考大神博客码的,有些地方还是不太明白. 而且这题还可以双向dfs做,有时间再做一下. // HDU-1269 #include ...
- codeforces 427C tarjan模板题
题意: 给你n个点每个点修建警察局的cost 对于这张图来说,与警察局在同一强联通分量里的每个点都可以被这个警察局照看 问你最小cost以及当前cost的方案数 思路: tarjan模板题~~~ ( ...
- 求无向图的连通分量或有向图的强连通分量—tarjan()ccf高速公路
概念定义: 在图论中,连通图基于连通的概念. 1. 连通(无向图): 若顶点Vi能通过路径到达Vj,那么称为Vi和Vj是连通的 对无向图:若从顶点Vi到顶点Vj有路径相连(当然从j到i也一定有路径), ...
- 强连通分量(Tarjan算法) 图解
强连通分量(Tarjan算法) 前言 第一件事:没事不要while(m–),会带来不幸 第二件事:看博客先看看评论,如果博主他写错了的话- 简介 先讲几个定义 强连通:两个顶点 uuu,vvv 可以相 ...
- 强连通分量(Tarjan算法)和缩点
强连通分量(Tarjan算法)和缩点 一些定义 给定一张有向图,对于图中任意两个节点 xxx 和 yyy ,存在从 xxx 到 yyy 的路径,也存在从 yyy 到 xxx 的路径,则称该有向图为强连 ...
- 算法学习:强连通分量 --tarjan
[定义] [强连通分量] 在一个子图中,任意点能够直接或者间接到达这个子图中的任意点,这个子图被称为强连通分量 [解决问题] 求图的强连通分量 同时能够起到 ...................缩点 ...
- POJ 2186 挑战 --牛红人 强连通分量——Tarjan
题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c .另外每个奶牛都是欢迎他自己的.求出被所有的奶牛欢迎的奶牛的数目.#i ...
- 强连通分量——tarjan算法缩点
一. 什么是强连通分量? 强连通分量:在有向图G中,如果两个顶点u,v间(u->v)有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通(strongly connect ...
- 有向图强连通分量tarjan算法
转自:http://www.byvoid.com/blog/scc-tarjan/ http://blog.csdn.net/geniusluzh/article/details/6601514 在有 ...
最新文章
- python 安卓模拟点击_python模拟点击在ios中实现的实例讲解
- 驰为hi10u盘启动linux,驰为Hi10 Plus二合一平板电脑:双系统更有玩头
- Go基础之--数组和切片
- 我画了35张图,就是为了让你深入 AQS!
- python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!
- k8s集群中 spark访问hbase中数据
- SVN missing 解决
- [AX]AX2012 Number sequence framework :(三)再谈Number sequence
- Python基于Django在线音乐播放网站设计
- 嵌入式应用程序下载到ARM开发板后如何运行程序?
- linux 鼠标残影,Win10系统拖动鼠标有残影怎么办
- Struts2-boobooke-概述
- 【OSS】使用Element实现图片上传到OSS
- 计算机能力考试合格证(5个模块),全国专业技术人员计算机应用能力考试
- linux如何删除多余引导
- 我所认知的世界,不是Fragmention,而是Think
- mysql 时间到年月日时分秒_请问如何将从mysql中读取的时间转变为年月日-时分秒的格式啊?...
- Android各种时间格式转换
- 高级计算机网络知识点
- java 替换文件中的字符串
热门文章
- iOS 分析MVC、MVP、MVVM、VIPER
- 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员最新解析
- 信息网络安全模拟题----软考高项的走过来
- 双向广搜(DBFS)
- uc游览器 android系统,手机UC浏览器2019最新版
- English Learning - L1-1 站在高处建立灵魂 2022.12.5 周一
- png转svg格式并上传至iconfont
- excel VBA快递查询
- c语言中优先级劣后级,基金优先级与劣后级之间的区别是什么?
- tinymce富文本编辑器扩展插件-设置段落间距