Codeforces Round #617 (Div. 3)F. Berland Beauty
题意:
给一棵树,边权未知,现在给m组约束,每组约束给出从u到v路径中的最小值,现在让你给出一组边权,使得符合之前的约束,不能给出输出-1
思路:
因为n较小,对于每组约束我们可以直接暴力修改路径上的权值,如果边的权值小于当前约束的最小值,则将权值修改,最后再根据每组约束暴力走一遍路径看路径是否满足要求,如果不满足则输出-1,最后还得对那些没有修改过的边随意赋值
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=;
int id[maxn][maxn],edge[maxn][maxn],fa[maxn],f[maxn],dep[maxn];
//id记录从i到j这条边的编号,edge记录边的权值,fa记录i的父亲是谁,f记录边的权值 ,dep记录深度
vector<int> a[maxn];
int from[maxn],to[maxn],mi[maxn];
int n,m,u,v,w;
void dfs(int x,int p)//处理出父亲与深度
{
fa[x]=p,dep[x]=dep[p]+;
for(int i=;i<a[x].size();i++)
if(a[x][i]!=p) dfs(a[x][i],x);
}
void dfs2(int x,int p)
{
for(int i=;i<a[x].size();i++){
if(a[x][i]!=p){
int to=a[x][i];
f[id[x][to]]=edge[x][to];
dfs2(a[x][i],x);
}
}
}
void solve()
{
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d%d",&from[i],&to[i],&mi[i]);
if(dep[from[i]]<dep[to[i]]) swap(from[i],to[i]);
int k1=from[i],k2=to[i],mini=mi[i];
while(dep[k1]!=dep[k2]){
int p=fa[k1];
if(edge[p][k1]<=mini) edge[p][k1]=edge[k1][p]=mini;
k1=p;
}
while(k1!=k2){
int p1=fa[k1],p2=fa[k2];
if(edge[p1][k1]<=mini) edge[p1][k1]=edge[k1][p1]=mini;
if(edge[p2][k2]<=mini) edge[p2][k2]=edge[k2][p2]=mini;
k1=p1,k2=p2;
}
}
for(int i=;i<=m;i++){
int x=inf;
int k1=from[i],k2=to[i],mini=mi[i];
if(dep[k1]<dep[k2]) swap(k1,k2);
while(dep[k1]!=dep[k2]){
int p=fa[k1];
x=min(x,edge[p][k1]);
k1=p;
}
while(k1!=k2){
int p1=fa[k1],p2=fa[k2];
x=min(x,edge[p1][k1]);
x=min(x,edge[p2][k2]);
k1=p1,k2=p2;
}
if(x!=mini){ cout<<-<<endl;return;}
}
dfs2(,);
for(int i=;i<n;i++){
if(!f[i]) cout<<<<" ";
else cout<<f[i]<<" ";
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d%d",&u,&v);
a[u].push_back(v);
a[v].push_back(u);
id[u][v]=id[v][u]=i;
}
dfs(,);
solve();
return ;
}
Codeforces Round #617 (Div. 3)F. Berland Beauty的更多相关文章
- Codeforces Round #496 (Div. 3) F - Berland and the Shortest Paths
F - Berland and the Shortest Paths 思路:还是很好想的,处理出来最短路径图,然后搜k个就好啦. #include<bits/stdc++.h> #defi ...
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- 构造 Codeforces Round #Pi (Div. 2) B. Berland National Library
题目传送门 /* 题意:给出一系列读者出行的记录,+表示一个读者进入,-表示一个读者离开,可能之前已经有读者在图书馆 构造:now记录当前图书馆人数,sz记录最小的容量,in数组标记进去的读者,分情况 ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- [CF百场计划]Codeforces Round #617 (Div. 3)
A. Array with Odd Sum Description You are given an array \(a\) consisting of \(n\) integers. In one ...
- Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)
题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...
- Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)
题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...
随机推荐
- zabbix脚本监控mysql
Zabbix监控mysql 1.1 客户端配置 1.1.1 安装客户端包 yum -y install unixODBC rpm -ivh zabbix-agent--.el6.x86_64.rpm ...
- ApacheHudi常见问题汇总
欢迎关注公众号:ApacheHudi 1. ApacheHudi对个人和组织何时有用 如果你希望将数据快速提取到HDFS或云存储中,Hudi可以提供帮助.另外,如果你的ETL /hive/spark作 ...
- Ubuntu 18.04 + ROS Melodic + TurtleBot3仿真
1. 下载安装包 官网地址: http://wiki.ros.org/action/show/Robots/TurtleBot?action=show&redirect=TurtleBot 所 ...
- owa部署
新建一台win server 2012(注意如果是2008要补丁) 配置静态ip DNS指向ad域的ip 测试: ping 下ad域的域名,是通的继续 把本机加入到ad域 重启下 用admin登陆: ...
- 27.openpyxl 向指定单元格添加图片并修改图片大小 以及修改单元格行高列宽
openpyxl 向指定单元格添加图片并修改图片大小 以及修改单元格行高列宽 from openpyxl import Workbook,load_workbook from openpyxl.dra ...
- ubuntu(linux)虚拟主机部署桌面,使用window链接
买的ubuntu只有命令行,想安装一个桌面,远程操控 网上教程很多,我主要遇到一个问题,百思不得其解 之间安装的不是连接超时,就是拒绝连接 又重新参考这篇博客安装后才解决 说一下大致流程,详细的见这位 ...
- Deepin Linux 实体机安装
Deepin Linux 实体机安装 1.下载ISO镜像并刻录到U盘上 系统ISO镜像下载 深度技术 刻录工具下载 深度技术(下方有深度启动盘制作工具下载) 这两个都下载好之后,打开刻录工具,选择镜像 ...
- 【转】C#中base关键字的几种用法:base()
转:https://blog.csdn.net/cplvfx/article/details/82982862 base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用 ...
- 值得收藏!my.cnf配置文档详解
MySql对于开发人员来说应该都比较熟悉,不管是小白还是老码农应该都能熟练使用.但是要说到的各种参数的配置,我敢说大部分人并不是很熟悉,当我们需要优化mysql,改变某项参数的时候.还是要到处在网上查 ...
- 客户端访问windows server2016 服务器共享 速度慢
客户端(windows10)敲完地址后,要过很久才会谈出窗口. 所有的客户端都出现过此现象. 解决:关闭server的 Smb1.0