[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 ...
随机推荐
- python--线程的其他方法
一 . current_thread的用法 import threading import time from threading import Thread, current_thread def ...
- (转)去除背景色的方法,适合iOS5/6/7/8.0beta
通常使用UISearchbar都需要去除其背景色来与自己的界面风格保持协调,但是UISearchbar的设计随着iOS版本的升级不断地在发生着变化,下面我们通过分析UISearchbar在各个iOS版 ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...
- magic mouse 2 在Mac上灵敏度太低的解决办法
1.打开终端 2.输入以下代码查看当前鼠标移动速度 defaults read -g com.apple.mouse.scaling 你会看到输出的是 “3”,这是初始速度 3.输入以下代码改变鼠标移 ...
- luogu2568 GCD
先筛法求出 \([1,n]\) 间的素数,然后枚举每个素数.可以发现,对于每个素数 \(x\),它的贡献是 \([1,\lfloor n/x \rfloor]\) 间的有序互质对数. 我们钦定 \(( ...
- tp 路径表示
本文实例分析了thinkphp常见路径用法.分享给大家供大家参考.具体如下: 这里介绍的标签主要有: __root__ __self__ __action__ __url__ __app__ __pu ...
- C++类指针初始化
上面的代码会打印“A”. C++ 类指针定义的时候没有初始化的时候,居然可以安全的调用类内部的成员函数而不出错. 在网上查了一下: 初始化为NULL的类指针可以安全的调用不涉及类成员变量的类成员函 ...
- 奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort
粘贴两个特别简单的冒泡排序 2014: Scramble Sort Description In this problem you will be given a series of lists co ...
- XML文件的操作说明
说明:C#中XmlNode与XmlElement的区别如下:xmlnode类表示xml文档中的单个节点,其命名空间为:System.Xml.XmlNode的三个最主要的子类包括:XmlDocument ...
- 九度oj 题目1025:最大报销额
题目描述: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600 ...