题意,从0点出发,遍历所有点,遍历边时候要付出代价,在一个SCC中的边不要付费。求最小费用。

有向图缩点(无需建立新图,,n《=50000,建则超时),遍历边,若不在一个SCC中,用一个数组更新记录最小到达该连通分量的最小边权即可。。。边聊天,边1A,哈哈。。。

#include<iostream>
#include<stack>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxv=50005,maxe=100005;
int nume=0;int head[maxv];int e[maxe][3];
void inline adde(int i,int j,int c)
{
e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
e[nume++][2]=c;
}
int dfn[maxv];int low[maxv];int vis[maxv];int ins[maxv]; stack<int>sta;
int scc[maxv];int numb=0;int times=0;
int n,m;
void tarjan(int u)
{
dfn[u]=low[u]=times++;
ins[u]=1;
sta.push(u);
for(int i=head[u];i!=-1;i=e[i][1])
{
int v=e[i][0];
if(!vis[v])
{
vis[v]=1;
tarjan(v);
if(low[v]<low[u])low[u]=low[v];
}
else if(ins[v]&&dfn[v]<low[u])
{
low[u]=dfn[v];
}
}
if(low[u]==dfn[u])
{
numb++;
int cur;
do
{
cur=sta.top();
sta.pop();
ins[cur]=0;
scc[cur]=numb;
}while(cur!=u);
}
}
int mincost_to_v[maxv]; //记录
void solve()
{
vis[0]=1;
tarjan(0);
for(int i=0;i<n;i++)
for(int j=head[i];j!=-1;j=e[j][1])
{
int v=e[j][0];
if(scc[i]!=scc[v])
{
if(e[j][2]<mincost_to_v[scc[v]])
{
mincost_to_v[scc[v]]=e[j][2];
}
}
}
int sums=0;
for(int i=1;i<=numb;i++)
{
if(mincost_to_v[i]!=inf) //起点
sums+=mincost_to_v[i];
}
printf("%d\n",sums);
}
void read_build()
{
int aa,bb,cc;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&aa,&bb,&cc);
adde(aa,bb,cc);
}
}
void init()
{
numb=times=nume=0;
for(int i=0;i<maxv;i++)
{
head[i]=-1;
ins[i]=dfn[i]=low[i]=scc[i]=vis[i]=0;
mincost_to_v[i]=inf;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
read_build();
solve();
}
return 0;
}

最新文章

  1. JQuery使用deferreds串行多个ajax请求
  2. .NET支持多平台后的一点拙见
  3. 将 instance 连接到 second_local_net - 每天5分钟玩转 OpenStack(85)
  4. Mysql 建立索引
  5. LightOj 1298 - One Theorem, One Year(DP + 欧拉)
  6. ubuntu14.04 配置中文输入法
  7. Libgdx 开发指南(1) 应用框架
  8. JavaScript中的setMonth()方法的小问题 解决:setMonth(month, 1)
  9. 简单几何(直线与线段相交) POJ 1039 Pipe
  10. 为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?
  11. 异常:ERROR [org.hibernate.proxy.BasicLazyInitializer] - CGLIB Enhancement failed...
  12. Microsoft Visual Studio 2017 安装过程
  13. thinphp验证码的简单实现
  14. 理解inode如何指向block
  15. LOJ#2245 魔法森林
  16. 2Servlet笔记
  17. oracle编码转换:AL32UTF8-&gt;ZHS16GBK
  18. Spring NamedParameterJdbcTemplate 详解
  19. Python递归 — — 二分查找、斐波那契数列、三级菜单
  20. Java io流详解三

热门文章

  1. [基础学习]MySQL常用语句命令总结
  2. python网络-多任务实现之协程(27)
  3. kubectl alias auto complete
  4. Android通过AIDL和反射调用系统拨打电话和挂断电话
  5. 03012_会话技术Cookie&amp;Session
  6. JS一个非常经典的问题:在遍历数组时对DOM监听事件,索引值将始终等于遍历结束后的值
  7. IOS开发学习笔记011-xcode使用技巧
  8. copy &amp; deepcopy
  9. Leetcode 593.有效正方形
  10. mysql数据库二进制初始化出现:170425 17:47:04 [ERROR] /application/mysql//bin/mysqld: unknown option &#39;--skip-locking&#39; 170425 17:47:04 [ERROR] Aborting 解决办法