题意:

保证原边以边权单调非减的顺序读入

思路:先把未知边加入,再加入原始边做MST,考虑从大到小,用数据结构维护,每一条原始边相当两个链赋值操作,每一条未知边相当于一个询问,答案即为询问之和

LCT和树剖都能维护

但因为没有强制在线,可以使用并查集维护

考虑做完MST后预处理出深度,父亲,父边权值三个信息

枚举没有用过的原始边,用类似树剖的方法用并查集每次将一个操作中所有的点缩成一个,暴力更改边权

若有未赋值过的边则无解

 #include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 1100000
#define M 51
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1)
#define oo 1e9 struct arr
{
int x,y,z;
}a[N]; struct node
{
int x,y;
node(int a,int b)
{
x=a;
y=b;
}
}; int f[N],g[N],fa[N],dep[N],b[N];
vector<node>c[N]; int find(int k)
{
if(fa[k]!=k) fa[k]=find(fa[k]);
return fa[k];
} void dfs(int u)
{
dep[u]=dep[f[u]]+;
for(int i=;i<=(int)c[u].size()-;i++)
{
int v=c[u][i].x;
if(v!=f[u])
{
f[v]=u;
g[v]=c[u][i].y;
dfs(v);
}
}
} int main()
{
int n,k,m;
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
c[x].push_back(node(y,));
c[y].push_back(node(x,));
fa[find(x)]=find(y);
}
for(int i=;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
for(int i=;i<=m;i++)
{
int t1=find(a[i].x);
int t2=find(a[i].y);
if(t1!=t2)
{
fa[t1]=t2;
c[a[i].x].push_back(node(a[i].y,a[i].z));
c[a[i].y].push_back(node(a[i].x,a[i].z));
b[i]=;
}
}
f[]=;
dfs();
for(int i=;i<=n;i++) fa[i]=i;
ll ans=;
for(int i=;i<=m;i++)
if(!b[i])
{
int x=find(a[i].x),y=find(a[i].y);
while(x!=y)
{
if(dep[x]<dep[y]) swap(x,y);
if(!g[x])
{
ans+=a[i].z;
g[x]=a[i].z;
}
fa[x]=find(f[x]);
x=find(x);
}
}
for(int i=;i<=n;i++)
if(!g[i])
{
printf("-1\n");
return ;
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Notes:SVG(2)---各种常见图形
  2. IE8下String的Trim()方法失效的解决方案
  3. Docker内部存储结构(devicemapper)解析(续)
  4. struts2 token 使用说明
  5. 【解题报告】POJ-1106 Transmitters
  6. Trail: JDBC(TM) Database Access(1)
  7. virtIO驱动安装
  8. ThinkPHP第六天(正则表达式)
  9. AngulaJS实战
  10. UML类图图示样例
  11. 关于request、response转发与重定向的简述
  12. Android 开发笔记___SQLite__基本用法
  13. 1013团队Beta冲刺day6
  14. Java基础小记
  15. (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
  16. 面向对象___str__和__repr__
  17. 雪碧图和如何实现浏览器中title的小图标
  18. (6).NET CORE微服务 Micro-Service ---- AOP框架
  19. C#项目”XXXXX”针对的是”.NETFramework,Version=v4.7.1”但此计算机没有安装它
  20. php 文件上传 $_FILES 错误码

热门文章

  1. nexys4-DDR开发板温度传感器ADT7420U
  2. 常用js方法合集
  3. 剖析DI
  4. mybatis if标签比较字符串
  5. Python第三方库之openpyxl(3)
  6. Struts2(七.删除和修改用户功能的实现)
  7. ubuntu中 VI 方向键、删除键问题
  8. java设计模式之观察者模式以及在java中作用
  9. Sping工作原理
  10. Remix-Solidity IDE上run选项下Environment选择Web3 Provider,出现不能连接到测试网Ganache提示