[ZJOI 2018] 线图
别想多了我怎么可能会正解呢2333,我只会30分暴力(好像现场拿30分已经不算少了2333,虽然我局的30分不是特别难想)。
首先求k次转化的点数显然可以变成求k-1次转化之后的边数,所以我们可以先让k强行减去1,然后再去求k次转化之后的图的边数。
这个时候的k就可能等于1,2,3,4,5,6,7,8,,,还不是很好求。
但是题目中初始给出的图是一颗树啊!也就是说我们完全可以用N^2的代价暴力进行一次转化,因为树只有N-1条边,也就是转化一次之后的图的点数就是N-1,边数最多也是(N-1)*(N-2)/2 [ 考虑菊花图233 ]。
这样再暴力转化一次图后,k的可能取值变成了0,1,2,3,4,5,6,7。
然后此时k=0的数据就可以直接输出转化之后的图的边数了,这没啥好说的。
如果k=1的话,我们只需要知道再转化一次后的图的边数就行了。这里我推了一个结论 : 如果一个图的每个节点i的度数是 D[i] ,那么转化一次之后的图的边数就是 ΣC(D[i],2) 。考虑转化之后的图中的边的两个端点是上一个图中邻接(有公共点)一对边,而且两条边邻接仅会有一个公共点,也就是转化之前的图中每个点的影响是独立的,所以我们直接考虑每个点带来的贡献然后求和一下就好了。
k=2的情况,根据上面的推论,我们只需要知道转化一次之后的图中每个点的度数然后就可以知道转化两次之后的图的边数。显然转化一次之后的图的点的度数就是原图中每条边的邻接的边数,所以我们也可以直接算出边的邻接数然后套用k=1的做法。
我可能是唯一一个没有A题却写博客的人了2333,还是太菜。
#include<bits/stdc++.h>
#define ll long long
const int maxn=5005;
const int ha=998244353;
int n,m,u[maxn],v[maxn],k,deg[maxn];
int ans=0,uu[maxn*maxn],vv[maxn*maxn];
int md[maxn*maxn]; inline int add(int x,int y){
x+=y;
return x>=ha?x-ha:x;
} inline void transform(){
int N=m,M=0; for(int i=1;i<=N;i++)
for(int j=i+1;j<=N;j++) if(u[i]==u[j]||u[i]==v[j]||v[i]==u[j]||v[i]==v[j]){
uu[++M]=i,vv[M]=j,deg[i]++,deg[j]++;
} n=N,m=M;
} inline void calc1(){
for(int i=1;i<=n;i++) ans=add(ans,deg[i]*(ll)(deg[i]-1)/2%ha);
printf("%d\n",ans);
} inline void calc2(){
for(int i=1;i<=m;i++) md[i]=deg[uu[i]]+deg[vv[i]]-2;
for(int i=1;i<=m;i++) ans=add(ans,md[i]*(ll)(md[i]-1)/2%ha);
printf("%d\n",ans);
} int main(){
scanf("%d%d",&n,&k),m=n-1,k--;
for(int i=1;i<=m;i++) scanf("%d%d",u+i,v+i);
transform(),k--;
if(!k) printf("%d\n",m);
else if(k==1) calc1();
else calc2();
return 0;
}
[ZJOI 2018] 线图的更多相关文章
- 【ZJOI 2018】线图(树的枚举,hash,dp)
线图 题目描述 九条可怜是一个热爱出题的女孩子. 今天可怜想要出一道和图论相关的题.在一张无向图 $G$ 上,我们可以对它进行一些非常有趣的变换,比如说对偶,又或者说取补.这样的操作往往可以赋予一些传 ...
- matplotlib箱线图与柱状图比较
代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 16:37:47 2018 @author: zhen &qu ...
- ZJOI 2018 一试记
ZJOI一试几天,天微冷,雨.倒是考试当天近午时分出了太阳. 开题前的一刻,心情反而平静了,窗外泛着淡金色的日光照进来,仿佛今天的我并不是所谓来冲击省队,而只是来经历一场洗礼. 开题了,虽然有一点小插 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- K线图学习
本博文(适合入门的股民朋友)内容来自网络,股市有风险,入市需谨慎 一.起源 K线图(Candlestick Charts)又称蜡烛图.日本线.阴阳线.棒线等,常用说法是“K线”,起源于日本十八世纪德川 ...
- [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上
将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...
- matplotlib绘制多组 散点连线图【用于对比】待实现
绘制散点+连线图: http://www.cnblogs.com/aaronhoo/p/5150596.html http://zhidao.baidu.com/link?url=Q1b7NG8eEz ...
- Wijmo金融图表系列之平均K线图&砖形图
2015年7月16日将会发布有史以来最令人兴奋的控件-Wijmo 金融图表,它的一体化设计为单个自定义集合提供了所有主要的金融图表,这是市场上的其他控件都不具备的独一无二的好处.它像Wijmo其他任意 ...
- Highcharts candlestick(K线图)案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- thinkphp 结合phpexcel实现excel导入
控制器文件: class ExcelAction extends Action { public function __construct() { import('ORG.Util.ExcelToAr ...
- ios runloop学习
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...
- ios之UITabelViewCell的自定义(xib实现2)
上篇文章介绍了如何用UITableView显示表格,并讲了几种UITableViewCell的风格.不过有时候我们需要自己定义 UITableViewCell的风格,其实就是向行中添加子视图.添加子视 ...
- Mac 输入法小技巧
相信使用Mac的朋友第一次使用Mac首先要考虑的就是输入法的问题,现在越来越多的第三方输入法都开始支持Mac平台,是否有同学仍然执着于看似“不符”国人习惯用法的OS X自带拼音输入法呢?自带的拼音输入 ...
- LeetCode 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
- JQuery中如何处理键盘事件
背景:比如在页面中,敲击回车键以后,实现登录功能,在之前的Winform开发时,也遇到过处理键盘事件的功能,比如游戏软件中,上下左右的移动等. 代码如下: $(document).keydown(fu ...
- magic mouse 2 在Mac上灵敏度太低的解决办法
1.打开终端 2.输入以下代码查看当前鼠标移动速度 defaults read -g com.apple.mouse.scaling 你会看到输出的是 “3”,这是初始速度 3.输入以下代码改变鼠标移 ...
- Spring注解@Component、@Repository、@Service、@Controller
@Service用于标注业务层组件 @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件, ...
- Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站
完整Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站 第一.安装和配置Apache Web服务器 运行升级命令来确保我们的系统组件各方面都是最新的. apt-get upd ...
- Wordpress无法上传图片
当在自己新搭建的个人网站添加文章的时候,我遇到了wordpress最普遍的第一个问题——无法上传图片. 每次图片上传完成之后跳出如上图无法建立目录的警告,根据提示首先确定是否有修改文件的权限通 ...