题面:https://www.cnblogs.com/Juve/articles/11799325.html

我太蒻了只会T1T2

组合:

欧拉路板子?不会呀。。。

然后打了个优化,防止暴栈

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
const int MAXN=4e5+;
int t,n,m,fa[MAXN],du[MAXN],edge,sta[MAXN<<],top=,deg[MAXN];
int to[MAXN<<],nxt[MAXN<<],pre[MAXN],cnt=,id[MAXN<<];
void add(int u,int v,int idd){
++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt,id[cnt]=idd;
}
int find(int x){
return fa[x]=(fa[x]==x?x:find(fa[x]));
}
bool vis[MAXN<<],visit[MAXN];
void dfs1(int x,int edge){
for(int i=pre[x];i;i=nxt[i]){
if(vis[i]||vis[i^]) continue;
int y=to[i];
vis[i]=vis[i^]=;
pre[x]=i;
dfs1(y,i);
i=pre[x];
}
sta[++top]=edge;
}
void work1(){
for(int i=,u,v;i<=m;++i){
u=read(),v=read();
add(u,v,i),add(v,u,i);
visit[u]=visit[v]=;
++du[u],++du[v];
fa[find(v)]=find(u);
}
int num=,st=,numm=;
for(int i=;i<=n;++i){
if(!visit[i]) continue;
if(fa[i]==i) ++num;
if(du[i]&) st=i,++numm;
}
if(num>||(numm!=&&numm!=)){
puts("NO");
return ;
}
dfs1(st,);
if(top!=m+){
puts("NO");
return ;
}
puts("YES");
while(top){
if(sta[top]!=){
int p=sta[top];
int q=p^;
if(p>q) printf("%d ",-id[p]);
else printf("%d ",id[p]);
}
--top;
}
puts("");
}
void dfs2(int x,int edge){
for(int i=pre[x];i;i=nxt[i]){
if(vis[i]) continue;
int y=to[i];
vis[i]=;
pre[x]=i;
dfs2(y,i);
i=pre[x];
}
sta[++top]=edge;
}
void dfs(int x){
visit[x]=;
for(int i=pre[x];i;i=nxt[i]){
if(visit[to[i]]) continue;
dfs(to[i]);
}
}
void work2(){
for(int i=,u,v;i<=m;++i){
u=read(),v=read();
add(u,v,i);
++du[u],++deg[v];//出度,入度
}
int st=,ed=;
for(int i=;i<=n;++i){
if(deg[i]==du[i]+){
if(!ed) ed=i;
else{
puts("NO");
return ;
}
}
else if(deg[i]+==du[i]){
if(!st) st=i;
else{
puts("NO");
return ;
}
}
else if(deg[i]!=du[i]){
puts("NO");
return ;
}
}
if(!st){
for(int i=;i<=n;++i)
if(du[i]){
st=i;
break;
}
}
dfs(st);
for(int i=;i<=n;++i)
if(!visit[i]&&deg[i]!=){
puts("NO");
return ;
}
dfs2(st,);
puts("YES");
while(top){
if(sta[top]!=){
int p=sta[top];
printf("%d ",id[p]);
}
--top;
}
puts("");
}
signed main(){
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
t=read(),n=read(),m=read();
//cout<<t<<' '<<m<<' '<<n<<endl;
for(int i=;i<=n;++i) fa[i]=i;
if(t==) work1();
else work2();
return ;
}

统计:

对于一个点,如果它被排序了,那么以它构成的逆序对就全消失了,所以对于每个点在hash表中统计是否有贡献,没有就跳过

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=2e5+,mod=;
int n,m,a[MAXN],ans=,sta[MAXN],top=;
bool vis[MAXN];
int c[MAXN],f[MAXN];
inline int lowbit(re int x){
return x&-x;
}
inline void update(re int pos,re int val){
for(re int i=pos;i<=n;i+=lowbit(i)){
c[i]+=val;
}
}
inline int query(re int pos){
re int res=;
for(re int i=pos;i>;i-=lowbit(i)){
res+=c[i];
}
return res;
}
struct hash_map{
int head[mod+],nxt[MAXN],val[MAXN],to[MAXN],tot;
int &operator [](int v){
int x=v%mod;
for(int i=head[x];i;i=nxt[i]){
if(to[i]==v) return val[i];
}
to[++tot]=v,nxt[tot]=head[x],head[x]=tot;
return val[tot]=;
}
}mp;
signed main(){
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(re int i=;i<=n;++i){
scanf("%lld",&a[i]);
}
for(re int i=n;i>=;--i){
re int t=query(a[i]-);
ans+=t;
f[i]=t;
update(a[i],);
mp[i]=t;
}
printf("%lld ",ans);
for(re int i=,p;i<=m;++i){
scanf("%lld",&p);
if(!mp[p]){
printf("%lld ",ans);
continue;
}
for(int j=p;j<=n;++j){
if(!mp[j]) continue;
if(a[j]<=a[p]){
mp[j]=;
ans-=f[j];
}
}
printf("%lld ",ans);
}
puts("");
return ;
}

点亮:不会

五子棋:模拟没啥可说的

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,mp[][],x,y;
bool check(int h,int l,int val){
int i=h,j=l,t=;
while(i->&&mp[i-][j]==val) --i;
t+=h-i+;
i=h;
while(i+<=&&mp[i+][j]==val) ++i;
t+=i-h;
//cout<<t<<endl;
if(t>=) return ;
i=h,j=l,t=;
while(j->&&mp[i][j-]==val) --j;
t+=l-j+;
j=l;
while(j+<=&&mp[i][j+]==val) ++j;
t+=j-l;
//cout<<t<<endl;
if(t>=) return ;
t=,i=h,j=l;
while(i->&&j+<=&&mp[i-][j+]==val) --i,++j,++t;
i=h,j=l;
while(i+<=&&j->&&mp[i+][j-]==val) ++i,--j,++t;
//cout<<t<<endl;
if(t>=) return ;
t=,i=h,j=l;
while(i->&&j->&&mp[i-][j-]==val) --i,--j,++t;
i=h,j=l;
while(i+<=&&j+<=&&mp[i+][j+]==val) ++i,++j,++t;
//cout<<t<<endl;
if(t>=) return ;
return ;
}
int main(){
freopen("five.in","r",stdin);
freopen("five.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%d%d",&x,&y);
mp[x][y]=(i&)+;
if(check(x,y,mp[x][y])){
if(i&) printf("A %d\n",i);
else printf("B %d\n",i);
return ;
}
/*for(int j=1;j<=15;++j){
for(int p=1;p<=15;++p){
cout<<mp[j][p]<<' ';
}
cout<<endl;
}*/
}
puts("Tie");
return ;
}

迷宫:

对于dij进行改造

首先是跑一个多源点dijkstra,在跑的过程中对于每个点维护一个堆,堆中存的是这个点到其他源点的d+1短路,每次用堆顶更新,因为其他的d短路会被我们卡掉,初始时如果是源点就在堆中插0,否则插inf,更新时维护堆的大小不超过d+1,因为是大根,所以如果一个点不是源点且堆内元素小于d+1,则说明到这个点我们可以把所有d条能到达源点的边都删掉,所以不能更新,此时堆顶是inf,所以是对的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define int long long
using namespace std;
const int MAXN=1e5+5,MAXM=1e6+5,inf=0x3f3f3f3f3f3f3f3f;
int n,m,k,d,p[MAXN],ans=0;
bool vis[MAXN],is[MAXN];
int to[MAXM<<1],nxt[MAXM<<1],pre[MAXN],val[MAXM<<1],cnt=0;
void add(int u,int v,int w){
++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt,val[cnt]=w;
}
priority_queue< pair<int,int> >q;
priority_queue<int>dis[MAXN];
void dijkstra(){
for(int i=1;i<=n;++i){
if(!is[i]) dis[i].push(inf);
else{
dis[i].push(0);
q.push(make_pair(0,i));
}
}
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(dis[y].top()>dis[x].top()+val[i]){
dis[y].push(dis[x].top()+val[i]);
while(dis[y].size()>d+1) dis[y].pop();
q.push(make_pair(-dis[y].top(),y));
}
}
}
}
signed main(){
freopen("maze.in","r",stdin);
freopen("maze.out","w",stdout);
scanf("%lld%lld%lld%lld",&n,&m,&k,&d);
for(int i=1,u,v,w;i<=m;++i){
scanf("%lld%lld%lld",&u,&v,&w);
add(u+1,v+1,w),add(v+1,u+1,w);
}
for(int i=1;i<=k;++i){
scanf("%lld",&p[i]);
++p[i],is[p[i]]=1;
}
dijkstra();
printf("%lld\n",dis[1].top()==inf?-1:dis[1].top());
return 0;
}

三华聚顶:不会

csp-s模拟100,101T1,T2题解的更多相关文章

  1. NOIP 模拟赛 day5 T2 水 故事题解

    题目描述 有一块矩形土地被划分成 \(\small n×m\) 个正方形小块.这些小块高低不平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个方向的四块地中,但是不能直接流入对角相连的小块中 ...

  2. 【2018暑假集训模拟一】Day1题解

    T1准确率 [题目描述] 你是一个骁勇善战.日刷百题的OIer. 今天你已经在你OJ 上提交了y 次,其中x次是正确的,这时,你的准确率是x/y.然而,你最喜欢一个在[0; 1] 中的有理数p/q(是 ...

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

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

  4. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  5. NOIP2017普及组T2题解

    还是神奇的链接 上面依然是题目. 这道题依然很简单,比起2015年的普及组t2好像还是更水一些. 不过这道题能讲的比第一题多. 我们一起来看一下吧! 这一题,我们首先将书的编号全部读入,存在一个数组里 ...

  6. 【2018暑假集训模拟一】Day2题解

    T1 园艺工人的求助 [题目描述]终于,在一段繁忙的训练之后,到了NOIP 的举办的时候.同学们坐上了大巴车,享受着沿途的风光,讨论着未解决的问题,憧憬着NOIP 赛场上切题的样子.很快,大巴车到了大 ...

  7. noip提高组模拟赛(QBXT)T2

    T2count题解 [ 问题描述]: 小 A 是一名热衷于优化各种算法的 OIER,有一天他给了你一个随机生成的 1~n 的排列, 并定 义区间[l,r]的价值为: \[ \huge C_{l,r}= ...

  8. 【20180808模拟测试】T2 k-斐波那契

    描述 k-斐波拉契数列是这样的 f(0)=k;f(1)=k;f(n)=(f(n-1)+f(n-2))%P(n>=2); 现在我们已经知道了f(n)=1,和P: k的范围是[1,P); 求k的所有 ...

  9. 【20180807模拟测试】T2 box

    [问题描述] 有个桌子长 R 宽 C,被分为 R*C 个小方格.其中,一些方格上有箱子,一些方格上有按 钮,一些方格上有障碍物,一些方格上是空地.现在有个任务,需要把所有箱子推到这些按 钮上面.箱子有 ...

随机推荐

  1. 2018-6-17-win10-UWP-全屏

    title author date CreateTime categories win10 UWP 全屏 lindexi 2018-06-17 17:51:19 +0800 2018-2-13 17: ...

  2. 生成对抗网络(GAN)的18个绝妙应用

    https://juejin.im/post/5d3fb44e6fb9a06b2e3ccd4e 生成对抗网络(GAN)是生成模型的一种神经网络架构. 生成模型指在现存样本的基础上,使用模型来生成新案例 ...

  3. Deb版本Linux配置Selenium+Chrome+Java实现自动化测试

    1.安装chrome sudo apt-get install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/li ...

  4. 笔记55 Mybatis快速入门(六)

    相关概念介绍(一) 1.日志 有时候需要打印日志,知道mybatis执行了什么样的SQL语句,以便进行调试.这时,就需要开启日志,而mybatis自身是没有带日志的,使用的都是第三方日志,这里介绍如何 ...

  5. 笔记54 Mybatis快速入门(五)

    Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...

  6. 干货满满!10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  7. WPS Office for Mac如何修改Word文档文字排列?WPS office修改Word文档文字排列方向教程

    Word文档如何改变文字的排列方向?最新版WPS Office for Mac修复了文字排版相关的细节问题,可以更快捷的进行Word编辑,WPS Office在苹果电脑中如何修改Word文档文字排列方 ...

  8. No parser no filepath given问题解决

    关于 vue 项目 run dev 的时候,控制台警告: No parser and no filepath given, using 'babylon' the parser now but thi ...

  9. vue中使用axios与axios的请求响应拦截

    VUE中使用Axios axios的安装 npm install axios vue-axios axios在vue的配置与使用 在main.js中引入axios和vue-axios import a ...

  10. 思维题+贪心——牛客多校第一场C

    /* 给定一组n维向量 A=(a1/m,a2/m,a3/m ... an/m), 求另一个n维向量 P=(p1,p2,p3...pn),满足sum{pi}=1,使得ans=sum{(ai/m-pi)^ ...