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

我太蒻了只会T1T2

组合:

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<vector>
  6. using namespace std;
  7. inline int read(){
  8. int x=,f=;char ch=getchar();
  9. while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
  10. while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
  11. return x*f;
  12. }
  13. const int MAXN=4e5+;
  14. int t,n,m,fa[MAXN],du[MAXN],edge,sta[MAXN<<],top=,deg[MAXN];
  15. int to[MAXN<<],nxt[MAXN<<],pre[MAXN],cnt=,id[MAXN<<];
  16. void add(int u,int v,int idd){
  17. ++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt,id[cnt]=idd;
  18. }
  19. int find(int x){
  20. return fa[x]=(fa[x]==x?x:find(fa[x]));
  21. }
  22. bool vis[MAXN<<],visit[MAXN];
  23. void dfs1(int x,int edge){
  24. for(int i=pre[x];i;i=nxt[i]){
  25. if(vis[i]||vis[i^]) continue;
  26. int y=to[i];
  27. vis[i]=vis[i^]=;
  28. pre[x]=i;
  29. dfs1(y,i);
  30. i=pre[x];
  31. }
  32. sta[++top]=edge;
  33. }
  34. void work1(){
  35. for(int i=,u,v;i<=m;++i){
  36. u=read(),v=read();
  37. add(u,v,i),add(v,u,i);
  38. visit[u]=visit[v]=;
  39. ++du[u],++du[v];
  40. fa[find(v)]=find(u);
  41. }
  42. int num=,st=,numm=;
  43. for(int i=;i<=n;++i){
  44. if(!visit[i]) continue;
  45. if(fa[i]==i) ++num;
  46. if(du[i]&) st=i,++numm;
  47. }
  48. if(num>||(numm!=&&numm!=)){
  49. puts("NO");
  50. return ;
  51. }
  52. dfs1(st,);
  53. if(top!=m+){
  54. puts("NO");
  55. return ;
  56. }
  57. puts("YES");
  58. while(top){
  59. if(sta[top]!=){
  60. int p=sta[top];
  61. int q=p^;
  62. if(p>q) printf("%d ",-id[p]);
  63. else printf("%d ",id[p]);
  64. }
  65. --top;
  66. }
  67. puts("");
  68. }
  69. void dfs2(int x,int edge){
  70. for(int i=pre[x];i;i=nxt[i]){
  71. if(vis[i]) continue;
  72. int y=to[i];
  73. vis[i]=;
  74. pre[x]=i;
  75. dfs2(y,i);
  76. i=pre[x];
  77. }
  78. sta[++top]=edge;
  79. }
  80. void dfs(int x){
  81. visit[x]=;
  82. for(int i=pre[x];i;i=nxt[i]){
  83. if(visit[to[i]]) continue;
  84. dfs(to[i]);
  85. }
  86. }
  87. void work2(){
  88. for(int i=,u,v;i<=m;++i){
  89. u=read(),v=read();
  90. add(u,v,i);
  91. ++du[u],++deg[v];//出度,入度
  92. }
  93. int st=,ed=;
  94. for(int i=;i<=n;++i){
  95. if(deg[i]==du[i]+){
  96. if(!ed) ed=i;
  97. else{
  98. puts("NO");
  99. return ;
  100. }
  101. }
  102. else if(deg[i]+==du[i]){
  103. if(!st) st=i;
  104. else{
  105. puts("NO");
  106. return ;
  107. }
  108. }
  109. else if(deg[i]!=du[i]){
  110. puts("NO");
  111. return ;
  112. }
  113. }
  114. if(!st){
  115. for(int i=;i<=n;++i)
  116. if(du[i]){
  117. st=i;
  118. break;
  119. }
  120. }
  121. dfs(st);
  122. for(int i=;i<=n;++i)
  123. if(!visit[i]&&deg[i]!=){
  124. puts("NO");
  125. return ;
  126. }
  127. dfs2(st,);
  128. puts("YES");
  129. while(top){
  130. if(sta[top]!=){
  131. int p=sta[top];
  132. printf("%d ",id[p]);
  133. }
  134. --top;
  135. }
  136. puts("");
  137. }
  138. signed main(){
  139. freopen("merge.in","r",stdin);
  140. freopen("merge.out","w",stdout);
  141. t=read(),n=read(),m=read();
  142. //cout<<t<<' '<<m<<' '<<n<<endl;
  143. for(int i=;i<=n;++i) fa[i]=i;
  144. if(t==) work1();
  145. else work2();
  146. return ;
  147. }

统计:

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. #define re register
  7. using namespace std;
  8. const int MAXN=2e5+,mod=;
  9. int n,m,a[MAXN],ans=,sta[MAXN],top=;
  10. bool vis[MAXN];
  11. int c[MAXN],f[MAXN];
  12. inline int lowbit(re int x){
  13. return x&-x;
  14. }
  15. inline void update(re int pos,re int val){
  16. for(re int i=pos;i<=n;i+=lowbit(i)){
  17. c[i]+=val;
  18. }
  19. }
  20. inline int query(re int pos){
  21. re int res=;
  22. for(re int i=pos;i>;i-=lowbit(i)){
  23. res+=c[i];
  24. }
  25. return res;
  26. }
  27. struct hash_map{
  28. int head[mod+],nxt[MAXN],val[MAXN],to[MAXN],tot;
  29. int &operator [](int v){
  30. int x=v%mod;
  31. for(int i=head[x];i;i=nxt[i]){
  32. if(to[i]==v) return val[i];
  33. }
  34. to[++tot]=v,nxt[tot]=head[x],head[x]=tot;
  35. return val[tot]=;
  36. }
  37. }mp;
  38. signed main(){
  39. freopen("count.in","r",stdin);
  40. freopen("count.out","w",stdout);
  41. scanf("%lld%lld",&n,&m);
  42. for(re int i=;i<=n;++i){
  43. scanf("%lld",&a[i]);
  44. }
  45. for(re int i=n;i>=;--i){
  46. re int t=query(a[i]-);
  47. ans+=t;
  48. f[i]=t;
  49. update(a[i],);
  50. mp[i]=t;
  51. }
  52. printf("%lld ",ans);
  53. for(re int i=,p;i<=m;++i){
  54. scanf("%lld",&p);
  55. if(!mp[p]){
  56. printf("%lld ",ans);
  57. continue;
  58. }
  59. for(int j=p;j<=n;++j){
  60. if(!mp[j]) continue;
  61. if(a[j]<=a[p]){
  62. mp[j]=;
  63. ans-=f[j];
  64. }
  65. }
  66. printf("%lld ",ans);
  67. }
  68. puts("");
  69. return ;
  70. }

点亮:不会

五子棋:模拟没啥可说的

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. int n,mp[][],x,y;
  7. bool check(int h,int l,int val){
  8. int i=h,j=l,t=;
  9. while(i->&&mp[i-][j]==val) --i;
  10. t+=h-i+;
  11. i=h;
  12. while(i+<=&&mp[i+][j]==val) ++i;
  13. t+=i-h;
  14. //cout<<t<<endl;
  15. if(t>=) return ;
  16. i=h,j=l,t=;
  17. while(j->&&mp[i][j-]==val) --j;
  18. t+=l-j+;
  19. j=l;
  20. while(j+<=&&mp[i][j+]==val) ++j;
  21. t+=j-l;
  22. //cout<<t<<endl;
  23. if(t>=) return ;
  24. t=,i=h,j=l;
  25. while(i->&&j+<=&&mp[i-][j+]==val) --i,++j,++t;
  26. i=h,j=l;
  27. while(i+<=&&j->&&mp[i+][j-]==val) ++i,--j,++t;
  28. //cout<<t<<endl;
  29. if(t>=) return ;
  30. t=,i=h,j=l;
  31. while(i->&&j->&&mp[i-][j-]==val) --i,--j,++t;
  32. i=h,j=l;
  33. while(i+<=&&j+<=&&mp[i+][j+]==val) ++i,++j,++t;
  34. //cout<<t<<endl;
  35. if(t>=) return ;
  36. return ;
  37. }
  38. int main(){
  39. freopen("five.in","r",stdin);
  40. freopen("five.out","w",stdout);
  41. scanf("%d",&n);
  42. for(int i=;i<=n;++i){
  43. scanf("%d%d",&x,&y);
  44. mp[x][y]=(i&)+;
  45. if(check(x,y,mp[x][y])){
  46. if(i&) printf("A %d\n",i);
  47. else printf("B %d\n",i);
  48. return ;
  49. }
  50. /*for(int j=1;j<=15;++j){
  51. for(int p=1;p<=15;++p){
  52. cout<<mp[j][p]<<' ';
  53. }
  54. cout<<endl;
  55. }*/
  56. }
  57. puts("Tie");
  58. return ;
  59. }

迷宫:

对于dij进行改造

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #define int long long
  7. using namespace std;
  8. const int MAXN=1e5+5,MAXM=1e6+5,inf=0x3f3f3f3f3f3f3f3f;
  9. int n,m,k,d,p[MAXN],ans=0;
  10. bool vis[MAXN],is[MAXN];
  11. int to[MAXM<<1],nxt[MAXM<<1],pre[MAXN],val[MAXM<<1],cnt=0;
  12. void add(int u,int v,int w){
  13. ++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt,val[cnt]=w;
  14. }
  15. priority_queue< pair<int,int> >q;
  16. priority_queue<int>dis[MAXN];
  17. void dijkstra(){
  18. for(int i=1;i<=n;++i){
  19. if(!is[i]) dis[i].push(inf);
  20. else{
  21. dis[i].push(0);
  22. q.push(make_pair(0,i));
  23. }
  24. }
  25. while(!q.empty()){
  26. int x=q.top().second;
  27. q.pop();
  28. if(vis[x]) continue;
  29. vis[x]=1;
  30. for(int i=pre[x];i;i=nxt[i]){
  31. int y=to[i];
  32. if(dis[y].top()>dis[x].top()+val[i]){
  33. dis[y].push(dis[x].top()+val[i]);
  34. while(dis[y].size()>d+1) dis[y].pop();
  35. q.push(make_pair(-dis[y].top(),y));
  36. }
  37. }
  38. }
  39. }
  40. signed main(){
  41. freopen("maze.in","r",stdin);
  42. freopen("maze.out","w",stdout);
  43. scanf("%lld%lld%lld%lld",&n,&m,&k,&d);
  44. for(int i=1,u,v,w;i<=m;++i){
  45. scanf("%lld%lld%lld",&u,&v,&w);
  46. add(u+1,v+1,w),add(v+1,u+1,w);
  47. }
  48. for(int i=1;i<=k;++i){
  49. scanf("%lld",&p[i]);
  50. ++p[i],is[p[i]]=1;
  51. }
  52. dijkstra();
  53. printf("%lld\n",dis[1].top()==inf?-1:dis[1].top());
  54. return 0;
  55. }

三华聚顶:不会

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. Reqests----Get请求之参数化

    一.环境安装 >>pip install requests 注意:pip很容易就会版本升级,如果用python3的,请使用pip3 install requests 1.初始化版本 2.把 ...

  2. 自定义可点击的ImageSpan并在TextView中内置“View“

    有的时候可能想在TextView中添加一些图片,比如下图,发短信输入联系人时,要把联系人号码换成一个图片,但这个图片无法用固定的某张图,而是根据内容进行定制的,这更像一个view. 当然,如果你不是v ...

  3. android Intent和IntentFilter

    android的应用程序包含三种重要的组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动他们——都是依靠Intent来进行启动.Intent就封装 ...

  4. myEclipse环境下配置springMvc项目,进行简单的请求

    1."File-->New-->WebProject"新建一个web项目,命名为springMvc 2.将所需要用到的jar包复制到WEB-INF/lib路径下,然后右 ...

  5. Yacc - 一个生成 LALR(1) 文法分析器的程序

    SYNOPSIS 总览 yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename DESCRIPTION 描述 Yacc 从 f ...

  6. AWS lambda DynamoDB api gateway之间的连接

    创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...

  7. PHP算法之有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为是 ...

  8. 本地项目上传github

    (1)github上面新建仓库 (2) 1. git init //初始化仓库 2. git add .(文件name) //添加文件到本地仓库 3. git commit -m "firs ...

  9. kafka集群安装和使用

    kafka(1)kafka是一个分布式的消息缓存系统(2)kafka集群中的服务器都叫做broker(3)kafka有两类客户端,一个叫做producer(消息生产者),一类叫做consumer(消息 ...

  10. NX二次开发-UFUN工程图表格注释获取某一行的tag函数UF_TABNOT_ask_nth_row

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...