题意:

有一个女孩,需要打电话让所有的人知道一个消息,消息可以被每一个知道消息的人传递。

打电话的关系是单向的,每一次电话需要一定的花费。

求出打电话最少的花费或者判断不可能让所有人知道消息。

思路:

最小树形图模板题。

朱刘算法,复杂度O(n^3),n的规模较小。

代码:

 #include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; const int N = ;
const int inf = 0x3f3f3f3f; struct edge
{
int from,to,cost; edge(int a,int b,int c)
{
from = a;
to = b;
cost = c;
}
}; int in[],pre[],vis[],id[]; vector<edge> es; int zhu_liu(int n)
{
int res = ; int root = ; while ()
{
memset(vis,-,sizeof(vis));
memset(id,-,sizeof(id));
memset(in,inf,sizeof(in)); for (int i = ;i < es.size();i++)
{
edge e = es[i]; int to = e.to; if (e.from != e.to && e.cost < in[to])
{
in[to] = e.cost;
pre[e.to] = e.from;
}
} for (int i = ;i < n;i++)
{
if (i != root && in[i] == inf) return -;
} in[root] = ; int cnt = ; for (int i = ;i < n;i++)
{
res += in[i]; int v = i; while (vis[v] != i && id[v] == - && v != root)
{
vis[v] = i;
v = pre[v];
} if (id[v] == - && v != root)
{
for (int u = pre[v];u != v;u = pre[u])
{
id[u] = cnt;
} id[v] = cnt++;
}
} if (cnt == ) break; for (int i = ;i < n;i++)
{
if (id[i] == -) id[i] = cnt++;
} for (int i = ;i < es.size();i++)
{
edge e = es[i]; int v = e.to; es[i].to = id[es[i].to];
es[i].from = id[es[i].from]; if (es[i].to != es[i].from) es[i].cost -= in[v];
} root = id[root];
n = cnt;
} return res;
} int main()
{
int t; int kase = ; scanf("%d",&t); while (t--)
{
int n,m; es.clear(); scanf("%d%d",&n,&m); for (int i = ;i < m;i++)
{
int a,b,c; scanf("%d%d%d",&a,&b,&c); es.push_back(edge(a,b,c));
} int ans = zhu_liu(n); printf("Case #%d: ",++kase); if (ans == -) printf("Possums!\n");
else printf("%d\n",ans);
} return ;
}

最新文章

  1. HDU 3622 Bomb Game
  2. SharePoint 2013 开发——开发并部署webpart
  3. [MEAN Stack] First API -- 4. Organize app structure
  4. Web.Config 对静态文件 js css img 的客户端缓存策略
  5. jQuery1.9(辅助函数)学习之—— jQuery.param( obj ); 编辑
  6. eclipse中调出android sdk manager和android virtual device manager图标
  7. tp5入门
  8. Cocos2dx Android环境编译出错:jni/Android.mk: Cannot find module with tag &#39;scripting/lua-bindings&#39; in import path
  9. 用javascript写原生ajax(笔记)
  10. 【洛谷】【搜索+剪枝】P1731 [NOI1999]生日蛋糕
  11. 细说MySQL备份的基本原理(系列一 ) 备份与锁
  12. PHP代码审计笔记--URL跳转漏洞
  13. Python迭代器笔记
  14. pandas:由列层次化索引延伸的一些思考
  15. IOS取消performSelector警告
  16. cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧
  17. 20155233 实验一 Java开发环境的熟悉(Linux + IDEA)
  18. MariaDB插入中文出现???情况
  19. 查看flash的版本
  20. 【题解搬运】PAT_A1016 Phone Bills

热门文章

  1. spring根据name或者id获取实例
  2. IIS进程回收导致定时器失效的一种解决办法
  3. Android Studio安装配置
  4. 【托业】【新托业TOEIC新题型真题】学习笔记12-题库八-P7
  5. Vue中 export default 和 export 区别
  6. DataTable 指定位置添加列
  7. shell脚本中 if 判断时候-s是什么意思
  8. Kalman滤波学习
  9. springboot + mybatis配置分页插件
  10. 10.25 AITalkUat部署