链接:https://vjudge.net/problem/HDU-3072

题意:

给你n个点,1个点到另一个点连接花费c,但是如果几个点可以相互可达,则这几个点连通花费为0.

求将整个图连通的最小花费。

思路:

tarjan,求出强连通子图。

对每个子图的进点的最小值更新,再累加即可,(不过不知道为什么)

代码:

#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
#include <set>
#include <iterator>
#include <cstring>
using namespace std;typedef long long LL;
const int MAXN = 5e4+10;
const int INF = 0x3f3f3f3f;struct Node
{int from_, to_, value_;Node(int from, int to, int value):from_(from), to_(to), value_(value){}bool operator < (const Node &that) const{return this->value_ > that.value_;}
};vector<Node> G[MAXN];
stack<int> St;
int Dfn[MAXN], Low[MAXN];
int Vis[MAXN], Dis[MAXN];
int Fa[MAXN], Val[MAXN];
int Num[MAXN];
int n, m;
int times, cnt;void Init()
{for (int i = 1;i <= n;i++)G[i].clear(), Fa[i] = i;memset(Dfn, 0, sizeof(Dfn));memset(Low, 0, sizeof(Low));memset(Vis, 0, sizeof(Vis));memset(Dis, 0, sizeof(Dis));memset(Num, 0, sizeof(Num));memset(Val, 0, sizeof(Val));times = cnt = 0;
}void Tarjan(int x)
{Dfn[x] = Low[x] = ++times;Vis[x] = 1;St.push(x);for (int i = 0;i < G[x].size();i++){int node = G[x][i].to_;if (Dfn[node] == 0){Tarjan(node);Low[x] = min(Low[x], Low[node]);}else if (Vis[node] == 1)Low[x] = min(Low[x], Dfn[node]);}if (Low[x] == Dfn[x]){cnt++;Num[cnt] = 0;while (St.top() != x){Num[cnt]++;Fa[St.top()] = cnt;Vis[St.top()] = 0;St.pop();}Num[cnt]++;Fa[St.top()] = cnt;Vis[St.top()] = 0;St.pop();}
}int main()
{int t, cn = 0;while (~scanf("%d%d", &n, &m)){Init();int l, r, v;for (int i = 1;i <= m;i++){scanf("%d%d%d", &l, &r, &v);l++, r++;G[l].emplace_back(l, r, v);}for (int i = 1;i <= n;++i)if (!Dfn[i])Tarjan(i);for (int i = 1;i <= cnt;i++)Val[i] = INF;for (int i = 1;i <= n;i++){for (int j = 0;j < G[i].size();j++){int node = G[i][j].to_;if (Fa[i] != Fa[node])Val[Fa[node]] = min(Val[Fa[node]], G[i][j].value_);}}int res = 0;for (int i = 1;i <= cnt;i++)if (Val[i] != INF)res += Val[i];cout << res << endl;}return 0;
}

  

转载于:https://www.cnblogs.com/YDDDD/p/10822851.html

HDU-3072-IntelligenceSystem(tarjan,贪心)相关推荐

  1. Intelligence System HDU - 3072(强连通分量)

    Intelligence System HDU - 3072 题意:一个人要传递命令给所有人,如果两人之间互达,不需任何费用,求最少费用 有向图强连通. 1 #include <bits/std ...

  2. HDU 4714 Tree2cycle:贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...

  3. HDU 5385 The path(贪心、构造、最短路径树)

    HDU 5385 题目大意:给定一个图,dis表示第i个点到1点的最短路,dis1=0,给有向图上的边赋权值(1~n)满足dis1<dis2<dis3<--<disk>d ...

  4. HDU.3177Crixalis's Equipment(贪心)

    题目来源:3177 题目分析:一只蝎子要搬动一堆装备到一个容量为V的洞里面,每个装备有两个属性,一个是固有体积A,放置之后洞的剩余空间就会减少A,一个是移动体积B,只有当体积B小于等于当前洞的剩余体积 ...

  5. hdu 4547(LCA+Tarjan)

    解题思路:很明显的LCA问题,用Tarjan离线算法即可.这里输入的可能是字符串,所以直接用map保存.此外,根据题意,这里需要稍稍有点变化,因为cd:a\b\c...这里是一步即可完成,所以在查询a ...

  6. hdu 1269(Tarjan求强连通分量)

    这道题目就是求强连通分量... 这里采用的是Tarjan算法:http://m.blog.csdn.net/blog/qq574857122/16361033 AC代码: #include<io ...

  7. 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)

    Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  8. HDU - 5976 Detachment(贪心思维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5976 题意:把一个数拆成若干个不相同的数之和,问这些数的乘积最大是多少. 思路:一般要使乘积最大,那么 ...

  9. HDU 5976 Detachment 题解(贪心+逆元+前缀和,积)

    个人体会:无脑取模,最为致命!因为把存放前缀和的数组取了模,导致一些本来不等的元素变成了相同的元素,二分搜索出错...而且C++会T,G++就ac了.. http://acm.hdu.edu.cn/s ...

  10. HDU 5214 Movie【贪心】

    题意:给出n,l[1],r[1],a,b,c,d 其中 l[i]=l[i-1]*a+b,r[i]=r[i-1]*c+d; 问能否从这n个区间中选出不相交不重叠的三个区间 看的题解 先考虑最左边的区间, ...

最新文章

  1. android ui布局开发,Android UI设计初步(基本布局)
  2. SPOJ 375. Query on a tree (树链剖分)
  3. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
  4. 挑个很吉利的日子,开通我的博客!
  5. 当前完整路径_详解关键路径法,这可能是你找得到最详细的了
  6. jz指令是什么意思_S7-200 SMART 运动控制指令详解-电气阿伟带小白启程
  7. 如何在 Mac 上的 Pages 文稿中格式化文本栏?
  8. 喜提 300w 硬核资产!
  9. Tomcat监控利器Probe
  10. ios13 文件 连接服务器 您已离线,iOS13,终于可以屏蔽系统更新了
  11. 【程序员学习运筹学】什么是运筹学
  12. 最大子段和问题【思路及实现】
  13. 如何测试webservice接口
  14. 2018最新手机号码正则表达式
  15. [Power--IC]电源管理IC-STNS01
  16. 微信与企业微信的十个区别
  17. java毕业生设计在线多媒体学习社区的设计与实现计算机源码+系统+mysql+调试部署+lw
  18. 图像处理-最常见面试题(必问)
  19. 比较实用的几种端口入侵
  20. linux下7zip解压工具,Linux_Linux中的压缩软件7-zip的使用教程,7-zip 是一个开源压缩软件。它 - phpStudy...

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_4_缓冲流的效率测试_复制文件...
  2. [Bootstrap]7天深入Bootstrap(1)入门准备
  3. SQL window身份登陆 SQL server不能登陆
  4. 【转】在birt中显示条形码
  5. 《Python》 字典
  6. 聚类-----高斯混合模型
  7. Java学习:多线程
  8. 使用javascript实现html页面直接下载网盘文件
  9. 程序员算法之找出链表的第K个结点
  10. 064 import和from...import