首页 > 其他分享 >CodeForces 822F Madness

CodeForces 822F Madness

时间:2022-12-04 19:55:06浏览次数:52  
标签:typedef Madness txdy res CodeForces long maxn 822F define

CF 传送门

洛谷传送门

*2500 的黑(

首先不考虑最小化字典序,我们发现 \(res_i \ge \dfrac{2}{deg_u}\)。意思是理想的状态就是在一段周期内平均分配。

这个下界是可以达到的,根据连向父亲的边的的调整连向儿子的边即可,这个构造是容易的。

于是可以发现 \(res_i\) 的最小值是独立的,只要最小化每个 \(res_i\) 就最小化了字典序。好诈骗啊(((

时间复杂度 \(O(n)\)。为什么 \(n\) 只开到 \(100\)(

code
/*

p_b_p_b txdy
AThousandSuns txdy
Wu_Ren txdy
Appleblue17 txdy

*/

#include <bits/stdc++.h>
#define pb push_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 110;

int n, head[maxn], len, deg[maxn];
ldb a[maxn];
struct edge {
	int to, id, next;
} edges[maxn << 1];

void add_edge(int u, int v, int id) {
	edges[++len].to = v;
	edges[len].id = id;
	edges[len].next = head[u];
	head[u] = len;
}

void dfs(int u, int fa) {
	ldb k = u == 1 ? 0 : fmod(a[u] + 1, 2);
	for (int i = head[u]; i; i = edges[i].next) {
		int v = edges[i].to, id = edges[i].id;
		if (v == fa) {
			continue;
		}
		k = fmod(k + 2. / deg[u], 2);
		a[v] = k;
		printf("1 %d ", id);
		if (k < 1) {
			printf("%d %d %.12Lf\n", u, v, k);
		} else {
			printf("%d %d %.12Lf\n", v, u, k - 1);
		}
		dfs(v, u);
	}
}

void solve() {
	scanf("%d", &n);
	for (int i = 1, u, v; i < n; ++i) {
		scanf("%d%d", &u, &v);
		add_edge(u, v, i);
		add_edge(v, u, i);
		++deg[u];
		++deg[v];
	}
	printf("%d\n", n - 1);
	dfs(1, -1);
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,Madness,txdy,res,CodeForces,long,maxn,822F,define
From: https://www.cnblogs.com/zltzlt-blog/p/16950529.html

相关文章

  • Codeforces Round #815 (Div. 2)
    比赛链接C题意:给定一个大小为n*m的01矩阵,每次操作你可以消除一个L形(\(2*2\)矩阵)内的所有1,每次必须保证消除至少一个1,求操作数的最大值。核心思路:这个其实我们需要模......
  • Educational Codeforces Round 132 (Rated for Div. 2)
    https://codeforces.com/contest/1709C.RecoveranRBS题意:这里原本有一个合法的括号序列,现在将这个合法的括号序列中的一部分字符串替换为?你可以将?替换为(或者)......
  • Codeforces Round #832 (Div. 2)
    A.TwoGroups(CF1747A)题目大意给定一个整数数组\(a\),要求将\(a\)分成两部分\(s1,s2\),要求两部分的和的绝对值的差最大。即最大化\(|\sum(s_1)|-|\sum(s_2)|\)......
  • Codeforces Round #816 (Div. 2)
    [比赛链接](Dashboard-CodeforcesRound#816(Div.2)-Codeforces)B题意:给定数组长度n,参数k,\(\sum_{1}^{n}a_i/k=b\),并且区间和是s。其中b和s都是题目给定的。核......
  • CodeForces - 476C-Dreamoon and Sums(数学思维)
    C.DreamoonandSums题解:设则有题目所求可得所以代码#include<bits/stdc++.h>typedeflonglongLL;usingnamespacestd;constintmod=1e9+7;intmain(){#ifndefO......
  • Codeforces Global Round 10 H. ZS Shuffles Cards
    题目链接设f[i]表示还有i个数不在集合内的期望步数,尝试列一下转移式,会发现式子由转移到下一轮的期望步数和之后的DP值组成,考虑DP的转移过程,就会发现答案为转移到下一轮的......
  • Codeforces Round #154(Div.2)
    C.TextEditor【题意】有一篇文章,包含\(i\)行,每行有\(a_i\)个字母,也就是\(a_i+1\)个放置光标的位置。对于一个位于\((x,y)\)光标,每次操作可以上移/下移/左移/......
  • Codeforces Global Round 21 E
    E.PlacingJinas题链稍微手写一下发现就是一个杨辉三角然后我们知道杨辉三角第n行第m个是C(m-1,n-1)我们对应转化过来就是C(n+m-2,m-1)然后我们注意处理的组合数到4e5因......
  • Codeforces Round #834 A-C
    Avoids(){stringa;cin>>a;if(a[0]!='Y'&&a[0]!='e'&&a[0]!='s'){cout<<"No\n";return;}for(inti=0;i<a.size()-1;i++){if(a[......
  • Codeforces Round #805 (Div. 3) G2
    G2.PassablePaths(hardversion)题链我们思考一条链的特性发现只要“确定”两端之后就可以用LCA一遍判断是否是一条链的我们如何确定两端首先深度最深的一定是一......