第六周 2.21-2.27

只有一周了QAQ

2.21

CF 629 E Famil Door and Roads

其实Tarjan的时候搞一搞,就O(n+m)了吖。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <vector>
  4 using namespace std;
  5 typedef long long LL;
  6 typedef pair<int, int> pii;
  7 const int maxn = 1e5 + 10;
  8 vector<pii> q[maxn];
  9 double ans[maxn];
 10
 11 //Tree
 12 int cnt, h[maxn];
 13 struct edge
 14 {
 15     int to, pre;
 16 } e[maxn<<1];
 17
 18 void add(int from, int to)
 19 {
 20     cnt++;
 21     e[cnt].pre = h[from];
 22     e[cnt].to = to;
 23     h[from] = cnt;
 24 }
 25
 26 //TreeDP
 27 LL dis[maxn], fdis[maxn];
 28 int sz[maxn], fsz[maxn], dep[maxn];
 29 void dfs1(int p, int d)
 30 {
 31     sz[p] = 1, dep[p] = d;
 32     for(int i = h[p]; i; i = e[i].pre)
 33     {
 34         int to = e[i].to;
 35         if(dep[to]) continue;
 36         dfs1(to, d + 1);
 37         sz[p] += sz[to];
 38         dis[p] += dis[to] + sz[to];
 39     }
 40 }
 41
 42 //Tarjan
 43 int fa[maxn], vis[maxn], cur[maxn];
 44 int Find(int x)
 45 {
 46     return fa[x] == x ? x : fa[x] = Find(fa[x]);
 47 }
 48
 49 void dfs2(int p, int f)
 50 {
 51     fa[p] = p, vis[p] = 2;
 52     if(p != 1)
 53     {
 54         fsz[p] = fsz[f] + sz[f] - sz[p];
 55         fdis[p] = fdis[f] + dis[f] - dis[p] - sz[p] + fsz[p];
 56     }
 57     for(int i = h[p]; i; i = e[i].pre)
 58     {
 59         int to = e[i].to;
 60         if(to == f) continue;
 61         cur[p] = to;
 62         dfs2(to, p);
 63         fa[to] = p;
 64     }
 65     vis[p] = 1;
 66     int qsz = q[p].size();
 67     for(int i = 0; i < qsz; i++)
 68     {
 69         int to = q[p][i].first, id = q[p][i].second;
 70         if(!vis[to]) continue;
 71         int anc = Find(to);
 72         if(anc == to)
 73         {
 74             LL d = dep[p] - dep[to] + 1;
 75             ans[id] = (1.0 * dis[p] * fsz[cur[to]] + 1.0 * (fdis[cur[to]] - (LL)fsz[cur[to]]) * sz[p]) / sz[p] / fsz[cur[to]] + d;
 76         }
 77         else if(vis[p] == 1 && anc != p)
 78         {
 79             LL d = dep[p] + dep[to] - dep[anc] - dep[anc] + 1;
 80             ans[id] = (1.0 * dis[p] * sz[to] + 1.0 * dis[to] * sz[p]) / sz[p] / sz[to] + d;
 81         }
 82     }
 83     return;
 84 }
 85
 86 int main(void)
 87 {
 88     int n, m;
 89     scanf("%d %d", &n, &m);
 90     for(int i = 1; i < n; i++)
 91     {
 92         int u, v;
 93         scanf("%d %d", &u, &v);
 94         add(u, v), add(v, u);
 95     }
 96     for(int i = 0; i < m; i++)
 97     {
 98         int u, v;
 99         scanf("%d %d", &u, &v);
100         q[u].push_back(pii(v, i));
101         q[v].push_back(pii(u, i));
102     }
103     dfs1(1, 1);
104     dfs2(1, 0);
105     for(int i = 0; i < m; i++) printf("%.9f\n", ans[i]);
106     return 0;
107 }

Aguin

时间: 2024-12-21 16:20:52

第六周 2.21-2.27的相关文章

Linux 基础入门 第二周9.21~9.27

一.学习内容 本周主要学习内容主要贴合: 在进行<深入理解计算机系统>这门课的实验中没有遇到什么大问题,学习内容与上周实验<linux基础入门>有相似之处.本实验中的内容比较贴切老师上课所讲述的内容,可以说是对上课内容的一次再现,也是对课上知识点的补充. 在进行完上述学习之后进而学习了<Vim编辑器>这一章节的内容,在学习内容上没有太大的困难,主要都是相应的指令的练习,按部就班的完成就行.但在个人来看学习内容中有过多细碎的指令,在实际运用当中会有一定困难,但感觉主要联系

第六周 可执行代码 以及 PSP 燃尽图 等等

转眼已经第六周了.这周主要内容有下:(CHECKLIST) 1.完成未完成的功能点. 2.PSP. 3.站立会议(待开). 4.燃尽图. 5.各种图(折线,饼图). 6.checkList 具体任务如下: 1. i.将用户做过的题目整理到习题本中. ii.习题本可以记录用户当时填写的答案. iii.规范算式(4个数字). iv.将做过的题目去重. v.再次规范化输出算式(生成数目多少,括号位置,括号对数). vi.支持分数运算. vii.结果用分数显示. viii.结果显示分数的最简形式. iX

LINUX内核分析第六周学习总结——进程的描述和进程的创建

LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 进程的描述 进程描述符task_struct数据结构(一) 进程描述符task_struct数据结构(二) 进程的创建 进程的创建概览及fork一个进程的用户态代码 理解进程创建过程复杂代码的方法 浏览进程创建过程相关的关键代码 创建的新进程是从哪里开始执行的

实验总结 第六周 进程

分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构 Linux中创建进程一共有三个函数: fork  :创建子进程 vfork:和fork类似 clone:创建线程 进程创建过程: SYSCALL_DEFINE0(fork){    return do_fork(SIGCHLD, 0, 0, NULL, NULL);}#endif SYSCALL_DEFINE0(vfork){    return do_fork(CLONE_VF

杨其菊201771010134《面向对象程序设计(java)》第六周学习总结

<面向对象程序设计(java)>第六周学习总结 第一部分:理论知识 1)类.超类和子类2)Object:所有类的超类 3)泛型数组列表4)对象包装器和自动打包 5)参数数量可变的方法 6)枚举类7)继承设计的技巧 第二部分:实验部分 继承定义与使用<代码测试和示例程序的注释> 1.实验目的与要求 (1) 理解继承的定义: (2) 掌握子类的定义要求 (3) 掌握多态性的概念及用法: (4) 掌握抽象类的定义及用途://不能创建自己的对象,特殊类 (5) 掌握类中4个成员访问权限修饰

机器学习第六周--机器学习重要概念补充

一.sklearn中的Pipeline串联用法 Python搭建机器学习模型时,Pipeline是一个加快效率的方法,主要介绍学习串联用法.Pipeline处理机制就像是把所有模型塞到一个管子里,然后依次对数据进行处理,得到最终的分类结果,例如模型一可以是一个数据标准化处理,模型二可以是特征选择模型或者特征提取模型,模型三可以是一个分类器或者预测模型.Pipeline就是把这三个模型(模型不一定非要三个,根据自己实际需要)塞到管子里合并成一个模型调用,其中最后一个模型一定要是估计器,例如分类器.

第六周PSP &amp;进度条

团队项目PSP 一.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论alpha完成情况并总结 9:40 11:20 17 53 60 分析与设计 分析设计Beta版本 13:15 16:30 45 150 120 调试运行 调试alpha版本 18:30 20:10 15 85 60 学习 Java.jsp 21:00 22:20 5 75 90 总结 总结结果 23:26 23:58 0 32 30 二.饼图: 进度

第十六周进度条

第十六周 所花时间(包括上课) 21小时(上课2小时,读书3,整理文档10小时,编程5,写博客1) 代码量(行) 900行 博客量(篇) 1篇 了解到的知识点 对word文档的文字进行操作,知道了更多的知识 知道了如何往应用商店上发布软件

20169217 2016-2017-2 《网络攻防实践》第六周学习总结

教材内容总结 一.TCP/IP协议的安全隐患 造成操作系统漏洞的一个重要原因,就是协议本身的缺陷给系统带来的攻击点.网络协议是计算机之间为了互联共同遵守的规则.目前的互联网络所采用的主流协议TCP/IP,由于在其设计初期人们过分强调其开发性和便利性,没有仔细考虑其安全性,因此很多的网络协议都存在严重的安全漏洞,给Internet留下了许多安全隐患.另外,有些网络协议缺陷造成的安全漏洞还会被黑客直接用来攻击受害者系统.本文就TCP/IP协议自身所存在的安全问题和协议守护进程进行了详细讨论,指出针对

第六周(类模板)

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第六周(类模板) *作者:王忠 *完成日期:2015.4.14 *版本号:v1.0 * *问题描述:可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型. (1)要求类成员函数在类外定义. (2)在此基础上,再实现减法.乘法和除法 *输入描述: *程序输出: #include <iostream> using namespace std;