Contest 8
A:做法应该很多,比较好想的是每个点都往上倍增找到其能更新到的点。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 200010
int n,fa[N][],ans[][N];
struct data{int x,ch[];
}tree[N];
int whichson(int k){return tree[fa[k][]].ch[]==k;}
int main()
{
freopen("node.in","r",stdin);
freopen("node.out","w",stdout);
n=read();
for (int i=;i<=n;i++) tree[i].x=read();
for (int i=;i<=n;i++)
fa[tree[i].ch[]=read()][]=i,fa[tree[i].ch[]=read()][]=i;
fa[][]=;
for (int j=;j<;j++)
for (int i=;i<=n;i++)
fa[i][j]=fa[fa[i][j-]][j-];
for (int i=;i<=n;i++)
{
int k=tree[i].x,x=i;
for (int j=;~j;j--) if (k>(<<j)) x=fa[x][j],k-=(<<j);
ans[whichson(x)][fa[x][]]++;
}
for (int i=;i<=n;i++) printf("%d %d\n",ans[][i],ans[][i]);
return ;
}
B:直接模拟即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define P 1000000007
int n,m,a,b,c,x,y,ansx,ansy;
long long f;
bool flag[];
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int main()
{
freopen("schedule.in","r",stdin);
freopen("schedule.out","w",stdout);
n=read(),m=read(),a=read(),b=read(),c=read();
for (int i=;i<=m;i++)
{
f=(1ll*a*f+b)%(2ll*n*c);
if (f<1ll*n*c)
{
int t=f/c+;
if (!flag[t])
{
flag[t]=;
inc(x,),inc(y,t);
}
}
else
{
int t=f/c-n+;
if (flag[t])
{
flag[t]=;
inc(x,P-),inc(y,P-t);
}
}
inc(ansx,x),inc(ansy,y);
}
cout<<ansx<<' '<<ansy<<endl;
return ;
}
C:考虑扩展最大独立集的做法:设f[i][j]为i子树中离i最近的被选点与i的距离至少为j时的最优解,转移时枚举与根最近的点在哪棵子树及与根的距离即可转移。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 10010
#define M 110
int n,m,a[N],p[N],f[N][M],t=;
struct data{int to,nxt;
}edge[N<<];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
void dfs(int k,int from)
{
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) dfs(edge[i].to,k);
for (int j=;j<=m;j++)
{
int tot=;
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) tot+=f[edge[i].to][max(j,m-j-)];
if (j==m) f[k][]=tot+a[k];
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) f[k][j+]=max(f[k][j+],f[edge[i].to][j]+tot-f[edge[i].to][max(j,m-j-)]);
}
for (int i=m;~i;i--)
f[k][i]=max(f[k][i+],f[k][i]);
}
int main()
{
freopen("score.in","r",stdin);
freopen("score.out","w",stdout);
n=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<n;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
dfs(,);
cout<<f[][];
return ;
}
result:300 rank1
Contest 8的更多相关文章
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2016 Multi-University Training Contest 2 D. Differencia
Differencia Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- ZOJ 3703 Happy Programming Contest
偏方记录背包里的物品.....每个背包的价值+0.01 Happy Programming Contest Time Limit: 2 Seconds Memory Limit: 65536 ...
- 2012 Multi-University Training Contest 9 / hdu4389
2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...
- 2014 Multi-University Training Contest 9#11
2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others) ...
- 2014 Multi-University Training Contest 9#6
2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...
- 校际联合Contest
每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...
随机推荐
- Tomcat安装部署和安全加固优化以及反向代理应用
1.Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同 ...
- java阻塞队列之ArrayBlockingQueue
在Java的java.util.concurrent包中定义了和多线程并发相关的操作,有许多好用的工具类,今天就来看下阻塞队列.阻塞队列很好的解决了多线程中数据的安全传输问题,其中最典型的例子就是客园 ...
- SQL Server 2008 R2 链接 Oracle 10g
首先sqlserver 链接oracle可以通过两个访问接口: “MSDAORA” 和“OraOLEDB.Oracle” 1.“MSDAORA”访问接口是由Microsoft OLE DB Provi ...
- iframe ie低版本 横向滚动条的解决办法
吐槽下百度,在百度搜这个问题都是渣渣,谷歌直接就出来了,记录一下 设置Frame时,有一属性是scrolling="yes/no/auto",IE6的mozilla都支持,或许对a ...
- android 图片二维码识别和保存(一)
最新业务开发二维码识别的功能,这个功能,在很多应用上都有,比如微信长按图片识别二维码,如果图片中存在可以识别的二维码时,可以增加一个选项 识别二维码.那么如何去实现这个功能呢.这里其实也非常简单,首先 ...
- loadrunner之做压力测试要做的准备
前提B/S架构 1.要有个备库和主库保存一致 到时候做压力测试的时候,要断开主库连接到备库.进行测试.以免主库出现垃圾数据.2.节点 判断单节点能承受多大的压力,如200万的用户账号,10万的在线用户 ...
- python-模块详解
模块: 模块的分类: 第三方模块/扩展模块:没在安装python解释器的时候安装的那些功能 自定义模块:你写的功能如果是一个通用的功能,那你就把它当做一个模块 内置模块:安装python解释器的时候跟 ...
- 基础SQL语句学习
(注:sql对大小写不敏感,附:命令行操作:cd 目录名 可进入文件,cd .. 可返回上级木目录) 下载MySQL,并配置环境变量: 使用命令行操作数据库(也可下载navicat操作),输入mysq ...
- Windows下MongoDB优化及问题处理
1.MongoDB 服务器CPU占用100% 给Mongodb对应数据库中的表建立索引,这里我采用使用工具:NoSQL Manager for MongoDB 直接在表的属性栏,选择Indexes,右 ...
- JUC——TimeUnit工具类(二)
TimeUnit工具类 在java.util.concurrent开发包里面提供有一个TimeUnit类,这个类单独看它的描述是一个时间单元类.该类是一个枚举类,这也是juc开包里面唯一的一个枚举类. ...