n个点m条边

m条边 权值

简单点说就是求把所有强连通分量连在一起所需的最小花费 不用双向

图是联通的  cost[] 维护到这里的最小花费求和

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stack>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. #define inf 100000000
  9. #define MAXN 50010
  10. #define MAXN1 1000010
  11. int head[MAXN];
  12.  
  13. struct edg
  14. {
  15. int fr,to,w,next;
  16. }x[MAXN1];
  17. int cnt,k,num;
  18. int dfn[MAXN],low[MAXN],z[MAXN],f[MAXN],cost[MAXN];
  19. bool vis[MAXN];
  20.  
  21. void add(int u,int v,int w)
  22. {
  23. x[cnt].fr=u;
  24. x[cnt].next=head[u];
  25. x[cnt].to=v;
  26. x[cnt].w=w;
  27. head[u]=cnt++;
  28. }
  29. stack<int>s;
  30.  
  31. void dfs(int u)
  32. {
  33. dfn[u]=low[u]=k++;
  34. vis[u]=;
  35. s.push(u);
  36. int i;
  37. for(i=head[u];i!=-;i=x[i].next)
  38. {
  39. if(!dfn[x[i].to])
  40. {
  41. dfs(x[i].to);
  42. low[u]=min(low[u],low[x[i].to]);
  43. }
  44. else if(vis[x[i].to])
  45. low[u]=min(low[u],dfn[x[i].to]);
  46. }
  47. if(dfn[u]==low[u])
  48. {
  49. num++;
  50. while(!s.empty())
  51. {
  52. int now=s.top();
  53. s.pop();
  54. vis[now]=;
  55. f[now]=num;
  56. if(now==u)
  57. break;
  58. }
  59. }
  60. }
  61.  
  62. int main()
  63. {
  64. int n,m;
  65.  
  66. while(scanf("%d%d",&n,&m)!=EOF)
  67. {
  68. int i;
  69. cnt=;
  70. num=;
  71. k=;
  72. memset(cost,,sizeof(cost));
  73. memset(head,-,sizeof(head));
  74. memset(vis,,sizeof(vis));
  75. memset(dfn,,sizeof(dfn));
  76. memset(f,,sizeof(f));
  77. memset(z,,sizeof(z));
  78. for(i=;i<=m;i++)
  79. {
  80. int a,b,w;
  81. scanf("%d%d%d",&a,&b,&w);
  82. add(a,b,w);
  83. }
  84. for(i=;i<n;i++)
  85. cost[i]=inf;
  86. for(i=;i<n;i++)
  87. if(!dfn[i])
  88. dfs(i);
  89. for(i=;i<cnt;i++)
  90. {
  91. int u,v;
  92. u=f[x[i].fr];
  93. v=f[x[i].to];
  94. if(u!=v)
  95. cost[v]=min(cost[v],x[i].w);
  96. }
  97. int ans=;
  98. for(i=;i<=num;i++)
  99. {
  100. if(cost[i]!=inf)
  101. ans=ans+cost[i];
  102. }
  103. printf("%d\n",ans);
  104. }
  105.  
  106. return ;
  107. }

强连通 HDU3072的更多相关文章

  1. hdu3072 强连通+最小树形图

    题意:有一个人他要把一个消息通知到所有人,已知一些通知关系:A 能通知 B,需要花费 v,而又知道,如果某一个小团体,其中的成员相互都能直接或间接通知到,那么他们之间的消息传递是不需要花费的,现在问这 ...

  2. HDU5934 强连通分量

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5934 根据距离关系建边 对于强连通分量来说,只需引爆话费最小的炸弹即可引爆整个强连通分量 将所有的强连通分 ...

  3. POJ1236Network of Schools[强连通分量|缩点]

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16571   Accepted: 65 ...

  4. 有向图的强连通分量的求解算法Tarjan

    Tarjan算法 Tarjan算法是基于dfs算法,每一个强连通分量为搜索树中的一颗子树.搜索时,把当前搜索树中的未处理的结点加入一个栈中,回溯时可以判断栈顶到栈中的结点是不是在同一个强连通分量中.当 ...

  5. The Bottom of a Graph-POJ2553强连通

    The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9759 Accepted: 4053 ...

  6. Tarjan算法--强连通分量

    tarjan的过程就是dfs过程. 图一般能画成树,树的边有三种类型,树枝边 + 横叉边(两点没有父子关系) + 后向边(两点之间有父子关系): 可以看到只有后向边能构成环,即只有第三张图是强连通分量 ...

  7. bzoj 1051 (强连通) 受欢迎的牛

    题目:这里 题意: Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为 ...

  8. 强连通分量的一二三 | | JZOJ【P1232】 | | 我也不知道我写的什么

    贴题: 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之 ...

  9. 有向图强连通分量的Tarjan算法

    有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G ...

随机推荐

  1. CF722D. Generating Sets[贪心 STL]

    D. Generating Sets time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. 转:设置Eclipse中的tab键为4个空格的完整方法

    from: https://my.oschina.net/xunxun10/blog/110074   设置Eclipse中的tab键为4个空格的完整方法 收藏 XunXun10 发表于 4年前 阅读 ...

  3. preg_match()漏洞

    今天大哥丢了一道题过来. <?php $str = intval($_GET['id']); $reg = preg_match('/\d/is', $_GET['id']); //有0-9的数 ...

  4. Android http超时选项的测试

    Android通过HttpConnectionParams类为http参数设置提供了两个超时的设置选项,分别是setSoTimeout和setConnectionTimeout.初看一眼Android ...

  5. PagerHelper-分页类

    2016.01.29   public static class PagerHelper { #region 数字分页类 /// <summary> /// /// </summar ...

  6. AngularJs 1.5 $location获取url参数

    地址:http://localhost/waservice.html?id=17 获取参数id的值 app.config(['$locationProvider', function ($locati ...

  7. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

  8. JS常用自定义方法

    1,JS生成随机数方法 getRandom(100),表示生成0-100的数 function getRandom(n){ return Math.floor(Math.random()*n+1) } ...

  9. C# socket UDPの异步链接

    基于C#的UDP异步连接,在本机上通过测试

  10. P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...