正题

题目链接:https://www.luogu.com.cn/problem/P4716


题目大意

给出\(n\)个点\(m\)条边的一张有向图,求以\(r\)为根的最小外向树。

\(1\leq n\leq 100,1\leq m\leq 10^4\)


解题思路

考虑一种贪心,对于每个点我们先选出一个连入的最小的边权,但是这样可能产生环。

考虑暴力将环去掉,我们枚举所有的环,然后将环缩成一个点,之后然后每个环外的边都减去入点所连接边的权值(可撤销贪心)。

然后问题规模就缩小了,不断重复上述过程即可。

时间复杂度\(O(n(n+m))\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
struct node{
int x,y,w;
}e[N*N];
int n,m,r,h[N],pre[N],v[N],id[N],ans;
int main()
{
scanf("%d%d%d",&n,&m,&r);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].w);
while(1){
memset(h,0x3f,sizeof(h));
memset(v,0,sizeof(v));
memset(id,0,sizeof(id));
for(int i=1;i<=m;i++)
if(e[i].x!=e[i].y&&e[i].w<h[e[i].y])
h[e[i].y]=e[i].w,pre[e[i].y]=e[i].x;
for(int i=1;i<=n;i++)
if(i!=r&&h[i]==h[0])return puts("-1")&0;
int cnt=0;
for(int p=1;p<=n;p++){
if(p==r)continue;
int x=p;ans+=h[x];
while(x!=r&&v[x]!=p&&!id[x])v[x]=p,x=pre[x];
if(x!=r&&!id[x]){
id[x]=++cnt;
for(int y=pre[x];y!=x;y=pre[y])id[y]=cnt;
}
}
if(cnt==0)break;
for(int i=1;i<=n;i++)
if(!id[i])id[i]=++cnt;
for(int i=1;i<=m;i++){
e[i].w-=h[e[i].y];
e[i].x=id[e[i].x];
e[i].y=id[e[i].y];
}
r=id[r];n=cnt;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. 使用matlab进行空间拟合
  2. Coursera系列-R Programming-Final Week-Assignment3 &amp; 总结
  3. [OpenCV] Samples 05: convexhull
  4. 安装Android SDK和ADT步骤和遇到的问题
  5. Linux编程(获取系统时间)
  6. KMP算法具体解释(转)
  7. [Angular 2] Inject Service with &quot;Providers&quot;
  8. Excel 内容粘贴到DataGridView, DataGridView 粘贴到 Excel
  9. 20160402javaweb 开发模式
  10. OpenCV学习(1)-安装(Windows)
  11. 你不知道的JavaScript(作用域和闭包)
  12. [LeetCode] Word Search [37]
  13. FFTW程序Demo
  14. 1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正
  15. MVC区域小结
  16. Array对象
  17. 论文泛读&#183;Adversarial Learning for Neural Dialogue Generation
  18. vue父子组件生命周期执行顺序
  19. python selenium 模块
  20. grep匹配某个次出现的次数

热门文章

  1. ASP.NET Core端点路由中三种让人困惑的路由函数
  2. 基于css的一些动画
  3. oracle中常用函数
  4. Web应用安全防护-WAF
  5. OVN架构
  6. VSCode Navigate Back/Forward
  7. MySQL双主+Keepalived高可用
  8. Mybatis笔记(1)
  9. Git入门配置
  10. 【odoo】【知识杂谈】单一实例多库模式下定时任务的问题分析