NOIP模拟测试8「匹配·回家」
匹配
哈希能A
水到爆炸
回家
事实上我做过一个原题,甚至比这个回家难的多,而且那个题多组询问必经点
然后我做一组询问就打炸了
大约就是删了很多东西,然后自己想的太简单了
直接统计了割点,懒得打lca和树上差分,懒得打dfs,偷懒让我付出很大代价
最后只有10,
打代码一定不能偷懒,一定不能偷懒
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 810000
ll dfn[A],low[A],ver[A],nxt[A],head[A],s[A],fa[A],belong[A],kx[A];
ll Head[A],Nxt[A],Ver[A],To[A],vst[A];
ll tot=0,tot2=0,num=0,n,m,t,root;
vector<ll> dcc[A],ans;
bool cut[A];
void add(ll x,ll y){
nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;
}
void Add(ll x,ll y){
Nxt[++tot2]=Head[x],Head[x]=tot2,Ver[tot2]=y;
}
inline ll read(){
ll f=1,x=0;char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<1)+(x<<3)+(c-'0');
c=getchar();
}
return f*x;
}
void tarjan(ll x)
{
ll flag=0;
dfn[x]=low[x]=++tot;
s[++s[0]]=x;
for(ll i=head[x];i;i=nxt[i])
{
ll y=ver[i];
if(!dfn[y])
{
tarjan(y);
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x])
{
flag++;
num++;
if(flag>1||x!=root)cut[x]=1;
while(s[0])
{
ll p=s[s[0]--];
dcc[num].push_back(p);
if(p==y)break;
}
dcc[num].push_back(x);
}
}
else low[x]=min(low[x],dfn[y]);
}
}
void dfs(ll x)
{
if(x==belong[n])return ;
vst[x]=1;
for(ll i=Head[x];i;i=Nxt[i])
{
ll y=Ver[i];
if(vst[y])continue;
fa[y]=x;
dfs(y);
}
return ;
}
void re(){
num=0,tot=0;ans.clear();tot2=0;
for(ll i=0;i<=800000;i++)
dcc[i].clear();
memset(nxt,0,sizeof(nxt));
memset(Head,0,sizeof(Head));
memset(Nxt,0,sizeof(Nxt));
memset(fa,0,sizeof(fa));
memset(vst,0,sizeof(vst));
memset(head,0,sizeof(head));
memset(ver,0,sizeof(ver));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(cut,0,sizeof(cut));
memset(kx,0,sizeof(kx));
}
int main()
{
t=read();
while(t--){
re();
n=read(),m=read();
for(ll i=1;i<=m;i++){
ll x=read(),y=read();
add(x,y);
add(y,x);
}
for(ll i=1;i<=n;i++)
if(!dfn[i]) root=i,tarjan(i);
ll nu=num;
for(ll i=1;i<=n;i++)
if(cut[i])belong[i]=++nu,kx[nu]=i;
for(ll i=1;i<=num;i++)
for(ll j=0;j<dcc[i].size();j++){
ll x=dcc[i][j];
if(cut[x]) Add(belong[x],i),Add(i,belong[x]);
else belong[x]=i;
}
/* for(ll i=1;i<=n;i++){
cout<<"belong="<<belong[i]<<endl;
}
*/ dfs(belong[1]);
ll x=fa[belong[n]];
while(x!=belong[1]){
if(x==0) break;
if(x>num) ans.push_back(kx[x]);
x=fa[x];
}
printf("%lld\n",1ll*ans.size());
sort(ans.begin(),ans.end());
for(ll i=0;i<ans.size();i++)
printf("%lld ",ans[i]);
cout<<endl;
}
}
NOIP模拟测试8「匹配·回家」的更多相关文章
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- NOIP模拟测试30「return·one·magic」
magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...
- NOIP模拟测试21「折纸·不等式」
折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...
- NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」
待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005]; ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- 20190803 NOIP模拟测试12「斐波那契(fibonacci)· 数颜色 · 分组 」
164分 rank11/64 这次考的不算太差,但是并没有多大的可能性反超(只比一小部分人高十几分而已),时间分配还是不均,T2两个半小时,T1半个小时,T3-额十几分钟吧 然额付出总是与回报成反比的 ...
- NOIP模拟测试8「寿司」
考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...
- NOIP模拟测试38「金·斯诺·赤」
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...
- NOIP模拟测试28「阴阳·虎·山洞」
写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...
随机推荐
- 【js】Leetcode每日一题-子数组异或查询
[js]Leetcode每日一题-子数组异或查询 [题目描述] 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]. 对于每个查询 i ...
- JavaScrip条件表达式优化
目录 1,前言 2,多条件if语句优化 3,参数默认值 4,Switch语句优化 1,前言 今早看了一篇文章<JavaScrip实现:如何写出漂亮的条件表达式>,原创于:华为云开发者社区, ...
- Redis 分布式锁|从青铜到钻石的五种演进方案
缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):Redis 分布式锁|从青铜到钻石的五种演进方案 缓存实战(三):分布式锁中的王者方案 - Redisson 上 ...
- 简单了解 MySQL 中相关的锁
本文主要是带大家快速了解 InnoDB 中锁相关的知识 为什么需要加锁 首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了. 你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁 ...
- 如何安装多个jdk并方便切换系统jdk版本
如何安装多个jdk并方便切换系统jdk版本 前言 在安装myeclipse时,压缩包中附带1.8.0的jdk,顺便安装并配置环境变量后发现系统默认的jdk变为了1.8.0.随后发现eclipse只支持 ...
- [Python] tkinter 之 Listbox & Combobox
示例: 1 #用户界面 2 import os 3 os.chdir('F:\\spyder_workspace\\ColCal') 4 import Main 5 from tkinter impo ...
- Bash技巧:使用 set 内置命令帮助调试 shell 脚本
Bash技巧:使用 set 内置命令帮助调试 shell 脚本 霜鱼片发布于 2020-02-03 在 bash 中,可以使用 set 内置命令设置和查看 shell 的属性.这些属性会影响 sh ...
- xrandr 直接输这个能显示可用的分辨和当前的分辨率 xrandr -s 1920x1200就设置成指定的分辨率
利用 xrandr 命令修改屏幕分辨率 时间 2016-10-29 原文 http://blog.csdn.net/mao0514/article/details/52965700 问题背景 ...
- 使用ps、top、ps_mem命令找出Linux中的最大内存消耗过程
使用ps.top.ps_mem命令找出Linux中的最大内存消耗过程 2020-02-08 16:06:59作者:自力稿源:云网牛站 您可能已经看到Linux系统多次消耗过多的内存,如果是这种情况,那 ...
- Java8 Period 类与 Duration 类 用法详解
引言 Java 8 中引入了两个与日期相关的新类: Period :基于日期值 Duration:基于时间值 它们最大的作用就不需要你自己复杂的计算关于两个年月日之间的相差的时间或日期啦. Perio ...