博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1827-Summer Holiday(强连通分量,贪心)
阅读量:7210 次
发布时间:2019-06-29

本文共 2126 字,大约阅读时间需要 7 分钟。

链接:

题意:

听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至少得花多少电话费就能让所有人都被通知到吗? 

思路:

tarjan算法, 缩点。

先tarjan缩点,得到入度为0的强连通分量,再在每个入度为0的强连通分量中寻找一个消耗最小的人。

找最小的人可以在搜索的出栈的时候得到。

卡cin

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int MAXN = 1e3+10;const int INF = 0x3f3f3f3f;vector
G[MAXN];stack
St;int Dfn[MAXN], Low[MAXN];int Vis[MAXN], Dis[MAXN];int Fa[MAXN], Cost[MAXN];int Val[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)); 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]; 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++; Val[cnt] = Cost[St.top()]; while (St.top() != x) { Val[cnt] = min(Val[cnt], Cost[St.top()]); Fa[St.top()] = cnt; Vis[St.top()] = 0; St.pop(); } Val[cnt] = min(Val[cnt], Cost[St.top()]); Fa[St.top()] = cnt; Vis[St.top()] = 0; St.pop(); }}int main(){ int t; while (~scanf("%d%d", &n, &m)) {// cin >> n >> m; Init(); for (int i = 1;i <= n;i++) scanf("%d", &Cost[i]);// cin >> Cost[i]; int l, r; for (int i = 1;i <= m;i++) { scanf("%d%d", &l, &r);// cin >> l >> r; G[l].push_back(r); } for (int i = 1;i <= n;++i) if (!Dfn[i]) Tarjan(i); for (int i = 1;i <= n;++i) { for (int j = 0;j < G[i].size();j++) { int node = G[i][j]; if (Fa[i] != Fa[node]) ++Dis[Fa[node]]; } } int res_num = 0, res_val = 0; for (int i = 1;i <= cnt;i++) if (!Dis[i]) res_num++, res_val += Val[i]; cout << res_num << ' ' << res_val << endl; } return 0;}

  

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

你可能感兴趣的文章
iOS App图标和启动画面尺寸
查看>>
在MAC下搭建JSP开发环境
查看>>
java实现qq自动添加好友
查看>>
传统IDC为什么要上云计算平台篇之一
查看>>
使用dbutils对mysql数据库做增删改查的基本操作方法
查看>>
SqlServer系列笔记——数据类型转换
查看>>
云计算与虚拟化了解二三事
查看>>
一个真实的案例———HPUX调整LUN大小识别更改
查看>>
路由重发分之RIP-OSPF
查看>>
saltstack 任务管理和集群(三)
查看>>
Deeplearning4j 手写体数字识别
查看>>
军哥12月份的成绩,只能算一般。但可能是其他机构一年通过IE的数量了(1个月27名IE诞生)...
查看>>
华为HCIE7-中间系统到中间系统的路由泄露、防环、认证和优化机制
查看>>
Flask练手项目之通讯录
查看>>
string replaceAll
查看>>
Python连接SQL Server数据库 - pymssql使用基础
查看>>
linux系统下网络连接不上的问题
查看>>
设计模式简易理解
查看>>
yum 原理
查看>>
我的友情链接
查看>>