noip 模拟 7
我花了我多久的rp啊……
考试经过
这次是三道题,依旧先看一遍,然后从头开始做
T1一看,这好像是KMP?等等,我好像忘了啊你个废,没事哈希也能做,On似乎可以呀,一波操作,我是不是要A题了?
转到T2,图论题,应该和tarjan有关,好像是割点,但板又双叒叕忘了不长记性,看见数据范围,先拿10分树分,前6个点可以暴力,40不少,过
T3,乍一看不太可做,一开始想到图论后来发现不对,然后想到一个n2的做法,觉得正确性有了直接开打,觉得最好是40分,但感觉常数有点大,估了25
剩下时间主要在检查,发现了包括return 0写进循环里面的sb错误,优化了几个常数虽然基本是负优化
考完了从后往前找自己,结果:100+30+20=150,就水成rank1了……
但真的很菜啊,教练说上届学长们都200多,自闭了……
太弱了,还是太弱了
T1 匹配
签到题,哈希模板直接带走,罗列几个常见错误:
1.模数取小的
2.数组没开够的
3.while写成if的
4.忘了清空的
5.板子没记住的
6.快读写挂的
觉得能过主要是忘了KMP,要是记得的话可能我也写假了,淦
T2 回家
题面就是让你求无向图两点之间的必经点,暴力有30,正解是tarjan求割点
注意答案一定是割点,但割点不一定是答案,因为一个割点去掉后图分成两个连通块,可能1和n仍然在一个连通块里,所以直接输出割点不对
法一
先求割点,再用点双缩点,建新图,建出来的肯定是树,以包含1节点的点双(任选一个)为根,dfs一遍,从包含n节点的点双(任选一个)回溯,我用的是跳父亲,回到根节点,途中经过的割点就是答案,答案排遍序输出就行
#include <bits/stdc++.h>
using namespace std;
int n,m;
struct node{
int from,to,next;
}a[900005];
int head[200050],mm=1;
inline void add(int x,int y)
{
a[mm].from=x;a[mm].to=y;
a[mm].next=head[x];head[x]=mm++;
}
bool v[400005];int num[200050],nu=0;
inline void get(int x){num[++nu]=x;}
int dfn[200050],low[200050],p;
bool ge[200050];stack <int> s;
vector <int>dcc[200050];int dnum,gen1,genn;
void tarjan(int x)
{
dfn[x]=low[x]=++p;s.push(x);
int ch=0;
for(int i=head[x];i;i=a[i].next)
{
int y=a[i].to;
if(!dfn[y])
{
tarjan(y);low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x])
{
ch++;
if(x!=1||ch>1)ge[x]=1;
dnum++;int temp;
do{
temp=s.top();
s.pop();
if(temp==1)gen1=dnum;
if(temp==n)genn=dnum;
dcc[dnum].push_back(temp);
}while(temp!=y);
dcc[dnum].push_back(x);
if(x==1)gen1=dnum;
if(x==n)genn=dnum;
}
}
else low[x]=min(low[x],dfn[y]);
}
}
struct newnode{
int from,to,next;
}b[1000005];
int nhead[500005],nmm=1;
inline void nadd(int x,int y)
{
b[nmm].from=x;b[nmm].to=y;
b[nmm].next=nhead[x];nhead[x]=nmm++;
}
int mp[400005],sb[200500];
inline void getnu()
{
int ga=dnum;
for(int i=1;i<=n;i++)
if(ge[i])sb[i]=++ga,mp[sb[i]]=i;
for(int i=1;i<=dnum;i++)
for(int j=0;j<dcc[i].size();j++)
{
int y=dcc[i][j];
if(ge[y])nadd(i,sb[y]),nadd(sb[y],i);
}
}
int fa[200500];
inline void dfs(int x)
{
v[x]=1;
for(int i=nhead[x];i;i=b[i].next)
{
int y=b[i].to;
if(v[y])continue;
fa[y]=x;dfs(y);
}
}
inline void clear()
{
memset(a,0,sizeof(a));mm=1;
memset(head,0,sizeof(head));
memset(v,0,sizeof(v));
memset(num,0,sizeof(num));nu=0;
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(0));p=0;
memset(ge,0,sizeof(ge));
while(!s.empty())s.pop();
for(int i=1;i<=n;i++)dcc[i].clear();
gen1=genn=0;dnum=0;
memset(b,0,sizeof(b));nmm=1;
memset(nhead,0,sizeof(nhead));
memset(mp,0,sizeof(mp));
memset(fa,0,sizeof(fa));
}
signed main()
{
int T;cin>>T;
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;scanf("%d%d",&x,&y);
if(x==y)continue;
add(x,y);add(y,x);
}
tarjan(1);getnu();dfs(gen1);
int p=fa[genn];
while(p&&p!=gen1)
{
if(p>dnum&&mp[p]!=1&&mp[p]!=n)get(mp[p]);
p=fa[p];
}
sort(num+1,num+nu+1);
printf("%d\n",nu);
for(int i=1;i<=nu;i++)printf("%d ",num[i]);
printf("\n");clear();
}
return 0;
}
由于我太菜了,所以常数挺大的,主要是memset。还有是数组要开够
法二
在求出割点后不缩点,直接在过程中看能不能回溯过去,如果不能证明这个点不是答案,如果行就加进集合,%XIN队
T3 寿司
我n2的暴力本来有四十分,结果由于memset了一大堆200万的数组,被卡到20,你也是,既然冲着部分分去的,数组开那么大干啥啊?
感觉方法挺多,见此题专门博客
考试反思
1.板子一定要记牢,多复习,别以为以后就会了,现在不行根本没有以后
2.大数组慎用memset,手动清空或设法覆盖
3.深入思考,不要轻易放弃
4.看看上一届学长,不能懈怠,更不能颓
noip 模拟 7的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- webpack(10)webpack-dev-server搭建本地服务器
前言 当我们使用webpack打包时,发现每次更新了一点代码,都需要重新打包,这样很麻烦,我们希望本地能搭建一个服务器,然后写入新的代码能够自动检测出来,这时候就需要用到webpack-dev-ser ...
- 「CF446C」 DZY Loves Fibonacci Numbers
「CF446C」 DZY Loves Fibonacci Numbers 这里提供一种优美的根号分治做法. 首先,我们考虑一种不太一样的暴力.对于一个区间加斐波那契数的操作 \([a,b]\),以及一 ...
- C语言:c++ ++c
#include <stdio.h> int main() {int a=3,x; x=(a++)+(++a)+(++a); printf("%d",x); getch ...
- FiddlerEverywhere 的配置和基本应用
一.下载大家自行在官网下载即可,这个可以当做是fiddler的升级版本,里面加了postman的功能,个人感觉界面比较清晰简约,比较喜欢. 二.下载完成之后大家可以自行注册登录,主页面的基本使用如下: ...
- 离散数学-传递闭包(POJ3275)
就是n的元素给定m个关系求他们之间的关系. eg. ∵a>b and b>c ∴a>c emmmm 若要知道n个元素的绝对关系,则需知道C(n,2)个关系. 例题:POJ3275 ...
- 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class cn.star.MybatisTest)
bug描述: 在Springboot整合Junit的时候编写测试类进行测试时, 出现以下错误: 十一月 28, 2019 2:53:48 下午 org.junit.vintage.engine.des ...
- 类加载机制+JVM调优实战+代码优化
类加载机制 Java源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行.虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直 ...
- yum 卸载
# yum list installed | grep [软件名] #yum -y remove [软件名]
- 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)
目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...
- Qt学习-ListView的拖拽
最近在学习Qt 里面的QML, 使用DropArea和MouseArea实现了ListView的拖拽. 想起了当年用Delphi, 差不多一样的东西, 不过那是2000了. Delphi也是不争气啊, ...