Intelligence System HDU - 3072(强连通分量)
Intelligence System
HDU - 3072
题意:一个人要传递命令给所有人,如果两人之间互达,不需任何费用,求最少费用
有向图强连通。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int inf=0x3f3f3f3f; 4 const int maxv=50010; 5 const int maxe=100010; 6 int n,m; 7 struct Edge{ 8 int u,v,w; 9 int nex; 10 }e[maxe<<1]; 11 int head[maxv]; 12 int cnt=0; 13 void init(){ 14 memset(head,-1,sizeof(head)); 15 cnt=0; 16 } 17 void add(int u,int v,int w){ 18 e[cnt].u=u; 19 e[cnt].v=v; 20 e[cnt].w=w; 21 e[cnt].nex=head[u]; 22 head[u]=cnt++; 23 } 24 int pre[maxv],sccno[maxv],low[maxv],dfsk,scc_cnt; 25 stack<int> s; 26 void dfs(int u){ 27 s.push(u); 28 low[u]=pre[u]=++dfsk; 29 for(int i=head[u];i!=-1;i=e[i].nex){ 30 int v=e[i].v; 31 if(!pre[v]){ 32 dfs(v); 33 low[u]=min(low[u],low[v]); 34 } 35 else if(!sccno[v]) low[u]=min(low[u],pre[v]); 36 } 37 if(low[u]==pre[u]){ 38 scc_cnt++; 39 for(;;){ 40 int x=s.top(); 41 s.pop(); 42 sccno[x]=scc_cnt; 43 if(x==u) break; 44 } 45 } 46 } 47 void find_scc(int n){ 48 memset(pre,0,sizeof(pre)); 49 memset(sccno,0,sizeof(sccno)); 50 memset(low,0,sizeof(low)); 51 dfsk=scc_cnt=0; 52 for(int i=0;i<n;i++) if(!pre[i]) dfs(i); 53 } 54 int d[maxv]; 55 int main(){ 56 while(scanf("%d%d",&n,&m)!=EOF){ 57 init(); 58 int u,v,w; 59 for(int i=0;i<m;i++){ 60 scanf("%d%d%d",&u,&v,&w); 61 add(u,v,w); 62 } 63 64 find_scc(n); 65 66 for(int i=1;i<=scc_cnt;i++) d[i]=inf; 67 for(int i=0;i<n;i++){ 68 for(int j=head[i];j!=-1;j=e[j].nex){ 69 int a=sccno[e[j].u]; 70 int b=sccno[e[j].v]; 71 if(a!=b) d[b]=min(d[b],e[j].w); //不互达,费用取最小的 72 } 73 } 74 int ans=0; 75 for(int i=1;i<=scc_cnt;i++) 76 if(d[i]!=inf) ans+=d[i]; 77 printf("%d\n",ans); 78 } 79 }
View Code
转载于:https://www.cnblogs.com/yijiull/p/7390664.html
Intelligence System HDU - 3072(强连通分量)相关推荐
- HDU 4635(强连通分量分解
题目:给出一个有向图,要求添加最多的边数,使得图仍然不强连通. 思路:首先这个图在添加边之后肯定变成了两个强连通分量,现在就看怎么分.然后我们可以注意到,原图进行强连通分量分解之后必然存在一些分量的出 ...
- UVa 12167 HDU 2767 强连通分量 Proving Equivalences
题意:给出一个有向图,问最少添加几条有向边使得原图强连通. 解法:求出SCC后缩点,统计一下出度为0的点和入度为0的点,二者取最大值就是答案. 还有个特殊情况就是本身就是强连通的话,答案就是0. 1 ...
- hdu 5420 Victor and Proposition 线段树建图+强连通分量
题意: http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=620&pid=1003 题目求有多少对互为充要 ...
- HDU 4685 Prince and Princess(二分图+强连通分量)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:给出n个王子和m个公主.每个王子有一些自己喜欢的公主可以匹配.设最大匹配为M.那么对于每个 ...
- 有向图 加最少的边 成为强连通分量的证明 poj 1236 hdu 2767
poj 1236: 题目大意:给出一个有向图, 任务一: 求最少的点,使得从这些点出发可以遍历整张图 任务二: 求最少加多少边 使整个图变成一个强连通分量. 首先任务一很好做, 只要缩点 之后 求 ...
- hdu 1269(Tarjan求强连通分量)
这道题目就是求强连通分量... 这里采用的是Tarjan算法:http://m.blog.csdn.net/blog/qq574857122/16361033 AC代码: #include<io ...
- Strongly connected HDU - 4635(tarjan+强连通分量)
题意: 给一个简单有向图,让你加最多的边,使他还是一个简单有向图. 题目: Give a simple directed graph with N nodes and M edges. Please ...
- HDU 5934:Boom——强连通分量+缩点
[题目描述] There are N bombs needing exploding.Each bomb has three attributes: exploding radius ri, posi ...
- 【HDU - 4635】Strongly connected(缩点,新图性质,建图,Tarjan求强连通分量)
题干: Give a simple directed graph with N nodes and M edges. Please tell me the maximum number of the ...
最新文章
- android 快速点击开启某功能(不如快速点击打开开发者模式)
- VC CListCtrl 第一列列宽自适应
- 图解一次Linux挂载操作和mount命令基本用法
- 【Windows10下OpenCV 3.4.0 + Visual Studio 2015开发环境的配】
- Java调用ElasticSearch 7.2.1 保存、统计、多字段分组聚合
- [导入]Ajax初试
- 【Java从入门到头秃专栏 8】语法篇(七) :反射 动态代理 注解
- 用DOM方式读取xml
- Maven和Eclipse整合
- 利用Python批量修改多个ass字幕文件
- windows是第几代计算机,第几代cpu不支持win7?全面分析第几代cpu不支持win7
- 网络安全----数字签名与数字证书
- android 滤镜lomo,iOS滤镜实现之LOMO(美图秀秀经典LOMO)(示例代码)
- C语言:习题3-2 高速公路超速处罚.2021-07-27
- 中画幅相机焦距水平视角_摄影中的“中画幅”是什么?
- Repeater的 Items属性、Items里面的控件有几个?
- 妇女节手抄报Word电子小报
- DataStage History
- sci期刊发表文章注意事项
- 人工智能之搜索策略-A*算法进阶
热门文章
- 怎么看so文件是哪个aar引进来的_突破微信限制,超大文件可以随便发
- 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,分析起来就这些原因...
- python下载大文件mp4_python 实现视频流下载保存MP4的方法
- 大学计算机实验报告2,大学计算机基础实验报告2.doc
- html怎么用脚本显示隐藏,使用隐藏状态而不是注释或自定义脚本标记来模板化HTML...
- MyEclipse和Eclipse中修改编码
- python opencv录制视频_Python-OpenCV 处理视频(一)(二): 输入输出 视频处理
- html5 职工入职后台管理系统_【开源】Net平台的后台管理系统
- python gui界面设置数据储存在哪里_Python写GUI
- python输出函数是什么_Python中打印函数使用概述,python,print,用法,总结