先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可。

注意判断无解

#include<iostream>
#include<cstdio>
using namespace std;
const int N=20005,M=100005;
int n,m,k,f[N],ta,tb,con;
bool v[M];
struct qwe
{
int u,v;
qwe(int U=0,int V=0)
{
u=U,v=V;
}
}a[M],b[M],ans[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int zhao(int x)
{
return f[x]==x?x:f[x]=zhao(f[x]);
}
int main()
{
n=read(),m=read(),k=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
if(z)
a[++ta]=qwe(x,y);
else
b[++tb]=qwe(x,y);
}
if(tb<k)
{
printf("no solution\n");
return 0;
}
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=ta;i++)
{
int fu=zhao(a[i].u),fv=zhao(a[i].v);
if(fu!=fv)
f[fu]=fv;
}
for(int i=1;i<=tb;i++)
{
int fu=zhao(b[i].u),fv=zhao(b[i].v);
if(fu!=fv)
f[fu]=fv,v[i]=1,k--;
}
if(k<0)
{
printf("no solution\n");
return 0;
}
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=tb;i++)
if(v[i])
{
f[zhao(b[i].u)]=zhao(b[i].v);
ans[++con]=qwe(b[i].u,b[i].v);
}
for(int i=1;i<=tb&&k;i++)
{
int fu=zhao(b[i].u),fv=zhao(b[i].v);
if(fu!=fv)
{
f[fu]=fv,k--;
ans[++con]=qwe(b[i].u,b[i].v);
}
}
if(k)
{
printf("no solution\n");
return 0;
}
for(int i=1;i<=con;i++)
printf("%d %d 0\n",ans[i].u,ans[i].v);
for(int i=1;i<=ta;i++)
{
int fu=zhao(a[i].u),fv=zhao(a[i].v);
if(fu!=fv)
{
f[fu]=fv;
printf("%d %d 1\n",a[i].u,a[i].v);
}
}
return 0;
}

最新文章

  1. angularjs的表单验证
  2. JAVA/Android Map与String的转换方法
  3. How to remove a batch of VMs and related Disks
  4. 并发编程 19—— 显式的Conditon 对象
  5. jQuery 插件开发文章收集
  6. GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)
  7. javascript优化
  8. HBase 的安装与配置
  9. [wordpress]后台自定义菜单字段和使用wordpress color picker
  10. C#:ref和out的联系及区别
  11. [Typescript] Typescript Enums vs Booleans when Handling State
  12. 求实现sql?
  13. Entity Framework基金会
  14. 【最新版】从零开始在 macOS 上配置 Lua 开发环境
  15. PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息
  16. CSS伪类详情
  17. Windows Internals 笔记——进程
  18. 面试题:常用的http状态码
  19. oracle数据库报错ora-01653表空间扩展失败解决方案
  20. Python实例---模拟微信网页登录(day3)

热门文章

  1. POJ 2391 floyd二分+拆点+最大流
  2. Spring中实现自定义事件
  3. [vxlan] 一 Why VXLAN
  4. java nio实现非阻塞Socket通信实例
  5. [转]thrift系列 - 快速入门
  6. Markdown 语法和代码高亮
  7. nginx access.log 忽略favicon.ico訪问记录的方法
  8. long类型字段转换成varchar2类型
  9. antd 表单验证
  10. JIRA运行太慢,修改JVM