PAT 题目详情 (pintia.cn)
题目
题意描述
n个房间, 有n-1个通道, kanade初始在1,Mafuyu 位置未知,求K到M的最小期望,也就是到每个地方的平均值,注意的是这里的求法,队里苦苦想了近一个小时,还是太弱了
比如第二个样例
5
1 2
2 3
3 4
1 5
显然,每种方式最后的期望都是一样的,所以最先走哪里无关紧要。
附代码
// #include<bits/stdc++.h> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> using namespace std; typedef long long LL; const int N = 1e5+10; int e[2*N], h[N], ne[2*N], st[N], idx, d, ans;//记得开2N int n; void init()//初始化!!! { idx = 0; ans = 0; d = 0; for(int i = 0; i <= n; i ++) h[i] = -1, st[i] = 0;//头初始为-1 } void add(int a, int b)//板子 { e[idx] = b, ne[idx] = h[a], h[a] = idx ++; } void dfs(int x, int step) { if(step == n) return; for(int i = h[x]; i!=-1 ; i = ne[i]) { if(!st[e[i]])//注意是目的地,e[i] 不是i { st[e[i]] = 1; d ++; ans = ans + d; dfs(e[i], step+1); d ++;//回溯 } } } int main() { int t; cin >> t; while(t --) { cin >> n; init(); for(int i = 1; i <n; i ++) { int a, b; cin >> a >> b; add(a, b); add(b ,a);//双向 } st[1] = 1; dfs(1, 1); printf("%.10lf ", (double)ans/(double)(n-1)); } return 0; }
最后的最后, 成功打铁,凉了,但是也知道了不足,基本功不扎实,思维题还出不来,可谓是基础课忘干净,cf没做到位,感觉还不如大一下。
对于cf 首先强化读题(PS:学长看五分钟就知道题意与样例,而我们琢磨了近一小时)
对于基础课,每周复盘一次,拿出一晚上,暂定周五晚,基础课敲板子
复杂的算法有时也是由简单算法的堆积!
暂时这样,后期再制定