「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)

题链

  • 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环。
  • 思路:n条边n个节点保证了是在一颗树的基础上加了一条边,有且只有一个奇数节点的环保证了,沿着一个节点走下去会碰到已经访问过的节点。对于方程的解,对1号节点赋予相对值0,遍历所有节点,使所有节点拥有一个相对于1号节点的相对值,具体分析见代码
#include <bits/stdc++.h>
using namespace std;
#define fre freopen("data.in","r",stdin);
#define frew freopen("my.out","w",stdout);
#define ms(a) memset((a),0,sizeof(a))
#define re(i,a,b) for(register int i=(a);(i)<(b);++(i))
#define ree(i,a,b) for(register int i=(a);(i)<=(b);++(i))
#define sf(x) scanf("%d",&(x))
#define reg register
typedef long long LL;
const int inf=(0x7f7f7f7f);
const int maxn=1e5+5;
struct node{int u,w;};
int n;
vector<node> adj[maxn];
struct A{int w;bool f;}a[maxn];
bool vis[maxn];
int ans;
bool f;
void dfs(int v,int par){
int vs=adj[v].size();
re(i,0,vs){
int u=adj[v][i].u;
if(vis[u]&&u!=par){//碰到已经访问过的非父亲的节点,则找到环
ans=(adj[v][i].w-a[v].w-a[u].w)/2;//ans作为偏移值
f=a[v].f;//保存环节点的状态,注意这里找到环之后不能return,要访问完所有节点,给所有节点打上相对值
}
if(!vis[u]){
vis[u]=1;
a[u].f=!a[v].f;
a[u].w=adj[v][i].w-a[v].w;//一个节点的相对值为实际的两节点权值和(边长)-减去另一个节点的相对值
dfs(u,v);
}
}
}
int main(){
sf(n);
for(int i=0,x,y,w;i<n;i++){
sf(x),sf(y),sf(w);
adj[x].push_back(node{y,w});
adj[y].push_back(node{x,w});
}
//第一维标记标记相对值,第二维标记状态
//假定相对值为从0开始,状态只有0,1两种,同状态的节点,其中一个需要增大,其他的都会增大
a[1]={0,1}; vis[1]=1; dfs(1,0);
ree(i,1,n){
if(a[i].f==f)printf("%d\n",a[i].w+ans);//和环节点状态一致的节点偏移量一样
else printf("%d\n",a[i].w-ans);//和环节点状态相反的节点偏移量相反
}
return 0;
}

# 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)的更多相关文章

  1. 银联高校极客挑战赛 初赛 第一场 B

    自学图论的码队弟弟 试图写非递归求解,然后TLE了一下午==,全程找不到bug,换成递归,一发AC 判断环写得很丑== #include<bits/stdc++.h> using name ...

  2. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队

    #6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...

  3. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

  4. 编程之美2015初赛第一场 hihoCoder #1156 : 彩色的树(染色问题)

    #1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, , …, n.树中有n - 1条边,任意两个节点间恰好有一条 ...

  5. 2015编程之美 初赛第一场C题 质数相关 二分图的最大匹配

    质数相关 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/msbop2015round2a/prob ...

  6. 2017 计蒜之道 初赛 第一场 A、B题

    A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏——成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋 ...

  7. hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  8. 2015 编程之美初赛第一场 AC题

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  9. 2018 计蒜之道-初赛 第一场 A-百度无人车

    百度一共制造了 nn 辆无人车,其中第 ii 辆车的重量为 a_i\ \mathrm{kg}ai​ kg. 由于车辆过重会增大轮胎的磨损程度,现在要给这 nn 辆车减轻重量.每将一辆车减轻 1\ \m ...

随机推荐

  1. sh_17_字符串的查找和替换

    sh_17_字符串的查找和替换 hello_str = "hello world" # 1. 判断是否以指定字符串开始 print(hello_str.startswith(&qu ...

  2. 关于Additive Ensembles of Regression Trees模型的快速打分预测

    一.论文<QuickScorer:a Fast Algorithm to Rank Documents with Additive Ensembles of Regression Trees&g ...

  3. $\LaTeX$数学公式大全1

    $1\ Geek\ and\ Hebrew\ letters$$\alpha$ \alpha$\beta$ \beta$\chi$ \chi$\delta$ \delta$\epsilon$ \eps ...

  4. CSS、Bulma介绍

    文章目录 一.序章 二.CSS 基础 1. CSS 介绍 2. CSS 语法 3. CSS常用元素 1.颜色 2.字体大小 3.宽高 4.盒模型(单独拿出来讲) 5.背景 4.1样式和内容分离 4.2 ...

  5. ThinkPhp中验证码不显示和配置项的问题解决方法

    1.验证码不显示在调用验证码之前加上 ob_clean();像这样: public function verify(){ ob_clean(); $verify = new \Think\Verify ...

  6. [eclipse]如何修改Eclipse编辑器的字体

    步骤如下, 菜单->"Window"->“Preference”->“General”->“Appearance”->“Colors & Fo ...

  7. linux 文件锁flock,lockf,fcntl

    1.flock,lockf,fcntl之间区别 先上结论:flock是文件锁,锁的粒度是整个文件,就是说如果一个进程对一个文件加了LOCK_EX类型的锁,别的进程是不能对这个文件加锁的. lockf是 ...

  8. Jenkins笔录

    1.Linux下安装jdk8的方法 ,只需要一条命令就可以安装jdk: yum install java-1.8.0-openjdk* -y 执行过这条命令无需配置,直接可以使用. 2.JDK12版本 ...

  9. Markdown 介绍

    Markdown 是目前互联网上最流行的写作语言,它使用一些简单的符号(* / ` > [] () #)来标记文本格式,其简洁的语法.优美的格式以及强大的软件支持深受广大网友的喜爱.维基百科上对 ...

  10. Docker入门(转载)

    Docker入门 一.Docker 1.什么是容器? 容器就是将软件打包成标准化单元,用于开发.交付和部署.容器是轻量的.可执行的独立软件包 ,包含软件运行所需的所有内容:代码.运行时环境.系统工具. ...