Codeforces 1388:C. Uncle Bogdan and Country Happiness(bfs+dfs)

博客讲述了Codeforces 1388 C题目的解题思路,重点在于利用树形结构结合DFS解决城市幸福感问题。文章分析了如何计算每个城市的快乐和不快乐人数,并指出了数据构造中需要注意的三种不满足条件。作者在比赛中遇到了编程错误和表述困难,强调了自身编程能力的不足。
摘要由CSDN通过智能技术生成

(题目链接)
题意:起初所有人都在1号城市,总共有m个人,每个城市有pi个人,每个城市都有一个幸福指数:快乐的人减去不快乐的人。给出n-1条路:u,v,代表城市u和城市v有一条双向边,每个人回到自己的城市是走最短路,也就是不会经过一个节点两遍,每个人在路途中可能变得不快乐,以后的路不能变得快乐,问给出的数据能不能满足每个城市的幸福指数。

思路:树形结构+从某个点出发到达其他所有节点,当然会想到bfs模拟。但是bfs模拟还需要某些信息:某个节点所需要经过的总人数,以及某个节点快乐的人数,这里dfs处理就好了。选择从0开始,避免特判1。很容易推出:当前节点不快乐的人数 = (当前节点所经过的总人数-当前节点的幸福值)/2 , 快乐的人数直接总人数减不快乐的人就好了。还要注意不满足数据构造的情况:1.如果:当前节点所经过的总人数-当前节点的幸福值为奇数,很显然构造不出这个数据。2.如果当前节点所经过的总人数-当前节点的幸福值为负数。3.如果当前快乐的人数为负数,肯定不满足。
(比赛的时候思路清晰的一批,要干嘛要写啥。结果写的时候这里有bug,那里有bug,情况讨论也是表述不清。写代码用了一个多小时,第二天早上才写出。吐了,还是码力不足。果然是自己太菜=.=,)
代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<stack>
#include<set>
using namespace std;
#define pb push_back
#define POP pop_back()
#define ll long long
#define db double
#define POP pop_back()
#define endl '\n'
const int maxn = 1e5+5;
const int inf = 0x3f3f3f3f;
const ll inF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const db eps = 1e-8;
ll a[maxn] , sum[maxn] , b[maxn] , h[maxn] , m;
int t , n;
bool vis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值