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之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...
随机推荐
- 20191121-2 Final发布
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10062 操作视频:https://www.bilibili.com/vi ...
- 选题Scrum立会报告+燃尽图 04
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8682 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐丽君 组名:组长 ...
- 非常完整的线性DP及记忆化搜索讲义
基础概念 我们之前的课程当中接触了最基础的动态规划. 动态规划最重要的就是找到一个状态和状态转移方程. 除此之外,动态规划问题分析中还有一些重要性质,如:重叠子问题.最优子结构.无后效性等. 最优子结 ...
- 在Git的PR(Pull Request)提示冲突无法merge合并的解决方案
问题 假设有一个分支A,向master分支提交PR,然后发生无法自动解决的冲突,PR提示不能执行merge合并. 解决方案1 本地checkout检出并切换到A分支,pull拉取更新到最新代码 在本地 ...
- Spring中Bean的实例化与DI的过程
引言 前文我们介绍了关于如何学习Spring的源码以及解析了spring中加载配置文件注册Beandefinition的过程.今天我们继续学习DI的过程. 创建实例和DI过程 IOC和DI都是对spr ...
- MongoDB 上手开发实践(入门上手开发这一篇就够了)
前言 MongoDB是一个介于 关系数据库 和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复 ...
- Scala实践10
1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...
- php配置xdebug插件,断点调试
xdebug 下载地址:https://xdebug.org 1.项目目录下新建phpinfo(); 文件: 2.快速查找符合自己的phpxdebug插件: https://xdebug.org/wi ...
- 用Django自动生成表遇到问题
因为以前在数据库中已经生成过Django 叫App01下的表,所以无法生成,在数据库中执行这个命令 DELETE FROM django_migrations WHERE app='App01';然后 ...
- canal 基于Mysql数据库增量日志解析
canal 基于Mysql数据库增量日志解析 1.前言 最近太多事情 工作的事情,以及终身大事等等 耽误更新,由于最近做项目需要同步监听 未来电视 mysql的变更了解到公司会用canal做增量监 ...