NOIP 2017 全真模拟冲刺

---LRH&&XXY

题目名称

那些年

铁路计划

毁灭

题目类型

传统

传统

传统

可执行文件名

years

trainfare

destroy

输入文件名

years.in

trainfare.in

destroy.in

输出文件名

years.out

trainfare.out

destroy.out

每个测试点时限

1.5s

1.0s

1.0s

内存限制

256 MB

256 MB

256 MB

测试点数目

20

20

20

每个测试点分值

5

5

5

注意选手下发子文件夹

那些年

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define maxn 100010
#define M 2000010
int n,m,num,head[maxn];
bool vis[maxn];
struct node{
int from,to;
}E1[maxn];
struct Node{
int from,to;
}E[maxn];
struct node1{
int to,pre,v;
}e[M+maxn*];
void Insert(int from,int to,int v,int id){
e[id].to=to;
e[id].v=v;
e[id].pre=head[from];
head[from]=id;
}
void bfs(){
memset(vis,,sizeof(vis));
queue<int>q;q.push();vis[]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
if(e[i].v==)continue;
int to=e[i].to;
if(!vis[to]){
q.push(to);
vis[to]=;
}
}
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("destroy.in","r",stdin);
freopen("destroy.out","w",stdout);
scanf("%d%d",&n,&m);int x,y;
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y,,i);
Insert(y,x,,i+n);
}
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
Insert(x,y,,n+n+i);
Insert(y,x,,n+n+m+i);
}
if(n==&&(m==||m==||m==)){
long long ans=1LL*(n--m)*m+m;
cout<<ans;
return ;
}
bool flag=;
long long ans=;
for(int i=;i<n;i++){
e[i].v=;e[i+n].v=;
for(int j=;j<=m;j++){
flag=;
e[j+n+n].v=;e[j+n+n+m].v=;
bfs();
e[j+n+n].v=;e[j+n+n+m].v=;
for(int k=;k<=n;k++){
if(!vis[k]){
flag=;
break;
}
}
if(flag)ans++;
}
e[i].v=;e[i+n].v=;
}
cout<<ans;
}

50分

运输计划

【题目背景】

公元 2044 年,人类进入了宇宙纪元。

【题目描述】

L 国有 n 个星球,还有 m 条双向航道,每条航道建立在两个星球之间,这 m条航道连通了 L 国的所有星球。为了方便,我们规定1号星球为好星球。

在好星球上,小 P 掌管一家物流公司,该公司有m个运输计划。第i个运输计划形如:有一艘物流飞船需要从 ui 号星球飞行到相邻的vi 号星球去。对于航道 j,飞船驶过它所花费的时间为 tj。开始所有的tj都是1秒。但星球居民对运输计划极其不满。

为了鼓励科技创新,L 国国王允许小 P 使用魔法到某个运输计划上,飞船驶过被施魔法的航道消耗时间为2秒,一个运输计划最多只能被施加1次魔法,每年小p只能使用一次魔法。

由于居民不识数,改为2秒后他们感觉飞船跑得飕飕快,于是就可能会对好星球上的小p产生满意度。好星球每一年都会对居民进行一次满意度调查。如果一个星球上的居民到好星球的时间增加了,他们就会对小P的物流公司产生1点满意度。好星球上的居民永远不会对小p的物流公司产生满意度。

在计划实施前,你需要帮助小p的物流公司统计出未来的每一年中,各将有多少个星球的居民对好星球有满意度。

【输入描述】

第一行包含三个整数N、M、Q 分别表示宇宙中星球数,小P的运输计划数和运输计划将要实施的年数。

接下来M行,其中第i行包含两个整数ui,v1表示第i条航线链接ui和vi两个星球。

接下来Q行其中第j行包含一个整数Rj,表示计划实行后第j年将会对第Rj个运输计划施魔法。

【输出描述】

一共Q行 其中第j行表示第j年有多少星球的居民对好星球上小p的物流公司产生了满意度。

【数据范围及约定】

对于24%的数据,满足以下条件  N<=100  M<=4950 Q<=30

对于48%的测试数据 满足以下条件:Q<=30

对于另外 32%的测试数据,满足以下条件:正确输出中不同数字<=50种。

对于全部测试数据 满足以下条件:

2 <= N <= 100 000 , 1 <= Q <= M <= 200 000

1 <= ui ,vi <=N, ui、vi不相等 , 1 <= Rj <=M 。

【样例输入及输出】

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define maxn 100010
int n,m,q,head[maxn],dis[maxn],Dis[maxn];
struct node{
int to,pre,v;
}e[*];
struct Node{
int from,to;
}E[];
bool vis[maxn];
void Insert(int from,int to,int v,int id){
e[id].to=to;
e[id].v=v;
e[id].pre=head[from];
head[from]=id;
}
void spfa(int s){
queue<int>q;
memset(vis,,sizeof(vis));
memset(dis,/,sizeof(dis));
q.push(s);vis[s]=;dis[s]=;
while(!q.empty()){
int now=q.front();q.pop();vis[now]=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(dis[to]>dis[now]+e[i].v){
dis[to]=dis[now]+e[i].v;
if(!vis[to]){
q.push(to);
vis[to]=;
}
}
}
}
}
void bfs(int s){
queue<int>q;
memset(vis,,sizeof(vis));
q.push(s);vis[s]=;Dis[s]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(!vis[to]){
Dis[to]=Dis[now]+;
vis[to]=;
q.push(to);
}
}
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("trainfare.in","r",stdin);
freopen("trainfare.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
E[i].from=x;
E[i].to=y;
Insert(x,y,,i);Insert(y,x,,i+m);
}
int now;
bfs();
while(q--){
scanf("%d",&now);
e[now].v=;e[now+m].v=;
int ans=;
spfa();
for(int i=;i<=n;i++){
if(dis[i]>Dis[i])ans++;
}
printf("%d\n",ans);
}
}

30分 暴力

 

 

毁灭

【题目背景】

在神秘的玄灵大陆上生活着曲墨两个部族,他们世代对立。

曲族新任族长曲香檀为了壮大曲族,大开杀戮,纤纤素手,沾满鲜血。一日,她乔装遇刺,身负重伤。

墨族神医墨连城,被女子的美貌所吸引,不但救了她,两人同时坠入爱河。

曲香檀竭尽全力隐瞒身份,新谎言掩盖了旧谎言,最终仍误会成塔,她离开了他,继续她的杀戮,继续她的族长之路。

连城不忍心爱之人双手沾满献血,在曲香檀即将开展下一次杀戮时,他决定阻止她——破坏曲族内部联络通道,不惜代价......

【题目描述】

曲族在玄灵大陆有n个聚居地,当初曲香檀为了方便调配族人,在族人的聚居地之间开辟了许多双向空间隧道,保证任意两个聚居地可以直接或间接连通。同时为了节省资源对抗墨族,所以任意两个聚居地之间有且只有一条空间隧道可以直接或间接到达。现在为了抵御墨连城,曲香檀又耗费玄力,打通了m条双向地下暗河,但这m条暗河不能惠及每一个聚居地。曲族内部既可以通过空间隧道联络,也可以用地下暗河,当然也可以两者都用。

墨连城之前治疗曲香檀,耗费了大半玄力。又通过各种方法获取曲族新的联络网,玄力更是所剩无几。所以他决定仅破坏1条空间隧道和1条地下暗河。破坏后,只要曲族内部有任意2个聚居地不能互达,连城就成功了。想在,他想知道有多少种方式可以破坏曲族的内部联络。

【输入描述】

第一行包含两个整数n和m。

接下来n-1行,每行两个整数x,y,表示x和y之间有一条双向空间隧道。

接下来m行,每行两个整数x,y,表示x和y之间有一条双向地下暗河。

【输出描述】

一行表示答案

【样例输入1】

4 1

1 2

2 3

1 4

3 4

【样例输出1】

3

【注意】

样例2与样例3请看下发子文件夹

样例1解释:

地下暗河只有1条,3空间隧道任选一条都可以使曲族内部不连通,总共有3种方式

样例2与样例3不解释

【子任务】

测试点编号

N=

M=

特殊性质

1

10

10

2

100

100

3、4

500

500

5、6、7

3000

3000

8、9、10

8000

1000

11

100000

50000

1、空间隧道构成一条链

2、每条地下暗河连通两个相邻聚居地

3、不会有两条地下暗河连通相同的聚居地

12

100000

70000

13

100000

90000

14、15、16

100000

100000

17、18、19、20

100000

1000000

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define maxn 100010
#define M 2000010
int n,m,num,head[maxn];
bool vis[maxn];
struct node{
int from,to;
}E1[maxn];
struct Node{
int from,to;
}E[maxn];
struct node1{
int to,pre,v;
}e[M+maxn*];
void Insert(int from,int to,int v,int id){
e[id].to=to;
e[id].v=v;
e[id].pre=head[from];
head[from]=id;
}
void bfs(){
memset(vis,,sizeof(vis));
queue<int>q;q.push();vis[]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
if(e[i].v==)continue;
int to=e[i].to;
if(!vis[to]){
q.push(to);
vis[to]=;
}
}
}
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("destroy.in","r",stdin);
freopen("destroy.out","w",stdout);
scanf("%d%d",&n,&m);int x,y;
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y,,i);
Insert(y,x,,i+n);
}
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
Insert(x,y,,n+n+i);
Insert(y,x,,n+n+m+i);
}
if(n==&&(m==||m==||m==)){
long long ans=1LL*(n--m)*m+m;
cout<<ans;
return ;
}
bool flag=;
long long ans=;
for(int i=;i<n;i++){
e[i].v=;e[i+n].v=;
for(int j=;j<=m;j++){
flag=;
e[j+n+n].v=;e[j+n+n+m].v=;
bfs();
e[j+n+n].v=;e[j+n+n+m].v=;
for(int k=;k<=n;k++){
if(!vis[k]){
flag=;
break;
}
}
if(flag)ans++;
}
e[i].v=;e[i+n].v=;
}
cout<<ans;
} 25分 暴力

25分 暴力

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 100001
int tot,front[N],to[N<<],nxt[N<<];
int dp[N],s[N],t[N];
int siz[N],bl[N],deep[N],fa[N];
bool vis[N];
int kk;
void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
}
void add(int u,int v)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
to[++tot]=u; nxt[tot]=front[v]; front[v]=tot;
}
void dfs(int x,int f)
{
for(int i=front[x];i;i=nxt[i])
if(to[i]!=f) dfs(to[i],x),dp[x]+=dp[to[i]];
}
void dfs1(int x,int f)
{
siz[x]=;deep[x]=deep[f]+;fa[x]=f;
for(int i=front[x];i;i=nxt[i])
if(to[i]!=f) dfs1(to[i],x),siz[x]+=siz[to[i]];
}
void dfs2(int x,int top)
{
bl[x]=top;
int y=;
for(int i=front[x];i;i=nxt[i])
if(to[i]!=fa[x] && siz[to[i]]>siz[y]) y=to[i];
if(!y) return;
dfs2(y,top);
for(int i=front[x];i;i=nxt[i])
if(to[i]!=fa[x] && to[i]!=y) dfs2(to[i],to[i]);
}
int getlca(int u,int v)
{
while(bl[u]!=bl[v])
{
if(deep[bl[u]]<deep[bl[v]]) swap(u,v);
u=fa[bl[u]];
}
return deep[u]>deep[v] ? v:u;
}
int main()
{
freopen("destroy.in","r",stdin);
freopen("destroy.out","w",stdout);
int n,m;
read(n); read(m);
if(m== || m== || m==) { printf("%I64d",m+1ll*(n--m)*m); return ;}
int u,v;
for(int i=;i<n;i++) read(u),read(v),add(u,v);
dfs1(,);
dfs2(,);
int lca;
for(int i=;i<=m;i++)
{
read(u); read(v);
dp[u]++; dp[v]++;
lca=getlca(u,v);
dp[lca]-=;
}
dfs(,);
long long ans=;
for(int i=;i<=n;i++)
if(!dp[i]) ans+=m;
else if(dp[i]==) ans++;
printf("%I64d",ans);
return ;
}

100分 树剖+树上差分

2017-9-26 NOIP模拟赛的更多相关文章

  1. 2019.7.26 NOIP 模拟赛

    这次模拟赛真的,,卡常赛. The solution of T1: std是打表,,考场上sb想自己改进匈牙利然后wei了(好像匈牙利是错的. 大力剪枝搜索.代码不放了. 这是什么神仙D1T1,爆蛋T ...

  2. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

  3. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  4. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  5. 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)

    题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...

  6. 【2019.7.26 NOIP模拟赛 T1】数字查找(figure)(数学)

    推式子 我们设\(n=kp+w\),则: \[(kp+w)a^{kp+w}\equiv b(mod\ p)\] 将系数中的\(kp+w\)向\(p\)取模,指数中的\(kp+w\)根据欧拉定理向\(p ...

  7. 2014-10-31 NOIP模拟赛

        10.30 NOIp  模拟赛   时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...

  8. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  9. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  10. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

随机推荐

  1. 理解WCF(第二部分,部分參考他人)

    該篇的主題:wcf到底是怎工作的? 一.什么是分布式: 首先看一张图: 由上图对比我们可以发现,区别就是前者把服务器放在了一台电脑上,而后者把服务器放在了多台电脑上.这样多台电脑处理起来的速度比一台电 ...

  2. Java企业微信开发_01_接收消息服务器配置

    一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:Java微信公众平台开发_01_本地服务器映射外网 2.一个企业微信账号: 去注册:(https://work.weixin.qq.c ...

  3. ASP里面令人震撼地自定义Debug类(VBScript)

    不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便 我想可能很多朋友都会用这样的方法“response.write ”,然后输出相关的语句来看看是否正确.前几天 ...

  4. cmd命令,输出为txt文本

    在命令行后面,加上'-t > d:output.txt'. 具体可参考如下图: //=====补充===== 所以,在调试nodejs的时候,如果用命令行调试,则可把输出信息都重定向到一个文件中 ...

  5. 安装DCOS,关于docker异常引发的调查

    入门DCOS,刚开始安装,碰到了一个异常: Bind for 0.0.0.0:9000 failed: port is already allocated. 调试这个问题花费了好长时间,因为无法通过n ...

  6. Python:format()方法

    转于:https://blog.csdn.net/zhang89xiao/article/details/53818906 博主:张肖的博客 描述: format的格式 replacement_fie ...

  7. 【P2P网贷新手入门】详解借款标的种类及其风险

    不同于国外的网贷平台以信用借款标为主,在中国,我们投资网贷平台会看到多样借款标,而投资人往往弄不清自己投资的标属于什么类型的标,特点怎么样,风险如何. 抵 押 标 定义:借款人用自己的房屋车辆等实物在 ...

  8. JavaScript继承与聚合

    一,继承 第一种方式:类与被继承类直接耦合度高 1,首先,准备一个可以被继承的类(父类),例如 //创建一个人员类 function Person(name) {//现在Person里面的域是由Per ...

  9. jquery easyui 推荐博客 (MVC+EF+EasyUI+Bootstrap)

    构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(52)-美化EasyUI皮肤和图标   系列目录 我很久以前就想更新系统的皮肤功能,Easyui 自 ...

  10. Fast Walsh–Hadamard transform

    考虑变换 $$\hat{A_x} = \sum_{i\ or\ x = x}{ A_i }$$ 记 $S_{t}(A,x) = \sum_{c(i,t)\ or\ c(x,t)=c(x,t),\ i ...