hdu 3072
来源:互联网 发布:北京房价数据app 编辑:程序博客网 时间:2024/06/05 18:47
学习了最小树形图
题解:http://www.cnblogs.com/wust-ouyangli/p/5722496.html
努力理解了最小树形图的原理
对于这道题
我个人感觉是类似于dijkstra
因为首先这个是一定能找到通路的,既然这样就不断更新(不管从哪里)到这个点的最小花费
#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <stack>#include <queue>using namespace std;const int maxn=50010;const int vm=100010;const int INF=0x3f3f3f3f;struct points{ int v,c;};vector<int> G[vm];int n;int dis[maxn],vis[maxn],inq[maxn];int uu[vm],vv[vm],ww[vm];int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;stack<int> S;void dfs(int u){ pre[u]=lowlink[u]=++dfs_clock; S.push(u); for (int i=0;i<G[u].size();i++) { int v=G[u][i]; if (!pre[v]) { dfs(v); lowlink[u]=min(lowlink[u],lowlink[v]); } else if (!sccno[v]) lowlink[u]=min(lowlink[u],pre[v]); } if (lowlink[u]==pre[u]) { scc_cnt++; for (;;) { int x=S.top(); S.pop(); sccno[x]=scc_cnt; if (x==u) break; } }}void find_scc(int n){ dfs_clock=scc_cnt=0; memset(sccno,0,sizeof(sccno)); memset(pre,0,sizeof(pre)); for (int i=0;i<n;i++) if (!pre[i]) dfs(i);}int main(){ int m,ans; while (~scanf("%d%d",&n,&m)) { for (int i=0;i<=n;i++) G[i].clear(); for (int i=1;i<=m;i++) { scanf("%d%d%d",&uu[i],&vv[i],&ww[i]); G[uu[i]].push_back(vv[i]); } find_scc(n); for (int i=1;i<=scc_cnt;i++) dis[i]=INF; for (int i=1;i<=m;i++) { int u=sccno[uu[i]],v=sccno[vv[i]]; // printf("u=%d v=%d w=%d\n",u,v,ww[i]); if (v!=u) dis[v]=min(dis[v],ww[i]); } n=scc_cnt; ans=0; for (int i=1;i<=scc_cnt;i++) { if (i!=sccno[0]) ans+=dis[i]; } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- HDU 3072
- hdu 3072
- hdu 3072 传递费用
- HDU 3072 Intelligence System
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- PAT程序设计考题——甲级1036( Boys vs Girls ) C++实现
- 浅谈BFC块状格式化上下文环境
- maven-依赖管理-实战篇
- 关于C#静态构造函数的几点说明
- bzoj 1559: [JSOI2009]密码 AC自动机+状压dp
- hdu 3072
- 2017上半年的工作总结
- HUD 1106 排序
- 和为S的连续正数序列
- piwik安装详解
- php XAMPP
- 皇帝身边的小太监----寄存器
- PHPCMS短信接口替换
- C++常用字符串分割方法