题面: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. 修改css样式+jq中的效果+属性操作+元素操作

    :checked    选框选中的 一.修改css样式: 1.参数只写属性名,则返回属性值 $(this).css( ' color ');   //300px 2.参数是属性名,属性值,逗号分隔,是 ...

  2. python的一个简单日志记录库glog的使用

    一. glog的简介 glog所记录的日志信息总是记录到标准的stderr中,即控制台终端. 每一行日志记录总是会添加一个谷歌风格的前缀,即google-style log prefix, 它的形式如 ...

  3. 笔记51 Mybatis快速入门(二)

    Mybatis的CRUD 1.修改配置文件Category.xml,提供CRUD对应的sql语句. <?xml version="1.0" encoding="UT ...

  4. 使用Fiddler抓取手机包

    配置Fiddler 设置抓取HTTPS包 允许为外部连接 配置移动端 移动端需要能够连接到主机做代理, 设置移动端的网络, 端口为Fiddler的端口, 然后给移动端安装证书, 访问主机名+代理端口号 ...

  5. vue组件添加鼠标滚动事件

    在一个组件标签上加鼠标滚动事件,应该写成    @mousewheel.native

  6. sqoop一些常用命令及参数

    常用命令列举 这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码. 序号 命令 类 说明 1 import ImportTool 将数据导入到集群 2 ...

  7. NX二次开发-UFUN删除工程图UF_DRAW_delete_drawing

    NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_part.h> UF_initialize ...

  8. NX二次开发-UFUN批量操作图层状态UF_LAYER_set_many_layers_status

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_layer.h> UF_initialize ...

  9. C/Python/Java环境变量配置

    链接 全图预览: Java: 只需添加下面三个环境变量即可使用Java.对照这我的添加就行. CLASSPATH的内容: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\li ...

  10. 2018 – 2019 年前端 JavaScript 面试题

    JavaScript 基础问题 1.使以下代码正常运行: JavaScript 代码: const a = [1, 2, 3, 4, 5]; // Implement this a.multiply( ...