20170117 机房『练习赛』

现代科学,面广枝繁,不是一辈子学得了的。惟一的办法是集中精力,先打破一缺口,建立一块或几块根据地,然后乘胜追击,逐步扩大研究领域。此法单刀直入,易见成效。
—— 王梓坤

我热爱生活,我是一名快速成长的OIer

目录:

  • 机房练习赛

    • 目录
    • T1 COLOR
    • T2 book
    • T3 TEACHER
    • 经验与教训
    • 附录1 model cpp
    • 附录2 修改后的color cpp

T1 COLOR

#include <cstdio>
#include <algorithm>
#include <cstring>
#define PROGRAM_NAME "color"
using namespace std;
template<class TE>inline void readin(TE &res)
{char ch;while ((ch=getchar())<'0'||ch>'9');res=ch-'0';while ((ch=getchar())>='0' && ch<='9') res=(res<<1)+(res<<3)+ch-'0';
}
const int MAXN = 100000+10000;
const int MAXM = 250000*2+10000;
const int MAXT = 100000+10000;
struct Edge
{int v, next;
}t[MAXM];
int T, n, m;
int u, v, num, head[MAXN];
int team[MAXT], volk[MAXN];inline void insert(int u, int v)
{t[++num].v=v;t[num].next=head[u];head[u]=num;t[++num].v=u;t[num].next=head[v];head[v]=num;
}
void solve()
{memset(head,0,sizeof(head));memset(volk,-1,sizeof(volk));num=0;readin(n);readin(m);for (int j=1; j<=m; j++){readin(u);readin(v);insert(u,v);}team[1]=1;volk[team[1]]=1;int front=1,rear=2;for (; front!=rear; front=front%MAXT+1)for (int i=head[team[front]]; i!=0; i=t[i].next)if (volk[t[i].v]==-1){team[rear]=t[i].v;volk[t[i].v]=volk[team[front]]^1;rear=rear%MAXT+1;}else if (volk[t[i].v]==volk[team[front]]){printf("NO\n");return ;}printf("YES\n");
}
int main()
{freopen(PROGRAM_NAME".in","r",stdin);freopen(PROGRAM_NAME".out","w",stdout);readin(T);for (int i=1; i<=T; i++) solve();return 0;
}

第一题70,bfs。但以上程序有bug,只for了一遍死的很惨,要多for。
时间复杂度:O(n)O(n)

T2 book

#include <cstdio>
#include <algorithm>
#include <cstring>
#define PROGRAM_NAME "book"
using namespace std;
template<class TE>inline void readin(TE &res)
{char ch;while ((ch=getchar())<'0'||ch>'9');res=ch-'0';while ((ch=getchar())>='0' && ch<='9') res=(res<<1)+(res<<3)+ch-'0';
}
const int MAXN = 5000+100;
const int MAXM = 100000*2+1000;
const int MAXT = 5000+100;
struct Edge
{int v, w, next;
}t[MAXM];
int n, m, st, a[MAXN];
int u, v, w, num, head[MAXN];
int team[MAXT], dis[MAXN];
bool vis[MAXN];inline void insert(int u, int v, int w)
{t[++num].v=v;t[num].w=w+a[u];t[num].next=head[u];head[u]=num;
}
int main()
{freopen(PROGRAM_NAME".in","r",stdin);freopen(PROGRAM_NAME".out","w",stdout);memset(head,0,sizeof(head));memset(dis,127/2,sizeof(dis));memset(vis,0,sizeof(vis));readin(n);readin(m);readin(st);for (int i=1; i<=n; i++) readin(a[i]);for (int j=1; j<=m; j++){readin(u);readin(v);readin(w);insert(u,v,w);insert(v,u,w);}team[1]=st;dis[team[1]]=0;vis[team[1]]=1;for (int front=1,rear=2; front!=rear; front=front%MAXT+1){for (int i=head[team[front]]; i!=0; i=t[i].next)if (dis[t[i].v]>dis[team[front]]+t[i].w){dis[t[i].v]=dis[team[front]]+t[i].w;if (!vis[t[i].v]){vis[t[i].v]=1;team[rear]=t[i].v;rear=rear%MAXT+1;}}vis[team[front]]=0;}int fm=0;for (int i=1; i<=n; i++) if (fm<dis[i]+a[i]) fm=dis[i]+a[i];printf("%d\n",fm>=dis[n+1]?-1:fm);return 0;
}

第二题AC,SPFA,点权+边权处理。点权加入边权,另需包扩终点点权。
时间复杂度:O(kE)O(kE)

T3 TEACHER

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <iostream>
using namespace std;
#define PROGRAM_NAME "teacher"
using namespace std;
template<class TE>inline void readin(TE &res)
{char ch;while ((ch=getchar())<'0'||ch>'9');res=ch-'0';while ((ch=getchar())>='0' && ch<='9') res=(res<<1)+(res<<3)+ch-'0';
}
const int MAXN = 1000+100;
const int MAXW = 1000+100;
const int MAXT = 1000+100;
int n, m, T, w[MAXN], b[MAXN], fa[MAXN], u, v;
int volki=0, volk[MAXT], head[MAXT], next[MAXN], Min[MAXT], f[MAXW];
int find(int x)
{if (fa[x]==x) return x;return fa[x]=find(fa[x]);
}
inline void findi(int x)
{if (fa[x]==x) volk[x]=++volki;if (!volk[fa[x]]) findi(fa[x]);volk[x]=volk[fa[x]];Min[volk[x]]=min(Min[volk[x]],w[x]);next[x]=head[volk[x]];head[volk[x]]=x;
}
int main()
{freopen(PROGRAM_NAME".in","r",stdin);freopen(PROGRAM_NAME".out","w",stdout);memset(volk,0,sizeof(volk));memset(head,0,sizeof(head));memset(Min,127/2,sizeof(Min));memset(f,0,sizeof(f));readin(n);readin(m);readin(T);for (int i=1; i<=n; i++) readin(w[i]);for (int i=1; i<=n; i++) readin(b[i]);for (int i=1; i<=n; i++) fa[i]=i;for (int j=1; j<=m; j++){int u, v;readin(u);readin(v);u=find(u);v=find(v);if (u!=v) fa[u]=v;}for (int i=1; i<=n; i++) if (!volk[i]) findi(i);for (int i=1; i<=volki; i++){int sumw=0,sumb=0;for (int j=head[i]; j!=0; j=next[j]) sumw+=w[j],sumb+=b[j];for (int W=T; W>=Min[i]; W--){for (int j=head[i]; j!=0; j=next[j])if (W>=w[j]) f[W]=max(f[W],f[W-w[j]]+b[j]);if (W>=sumw) f[W]=max(f[W],f[W-sumw]+sumb);}}printf("%d\n",f[T]);return 0;
}

第三题AC,当时为了分组编了许久。先用并查集分组,再kij动规解决。
时间复杂度:O(nW)O(nW)

经验与教训

练习赛是用来练经验和心态的,一定要淡薄功利,当作是一场修炼。林荫的人很“恐怖”,但千万不要妄自菲薄,更不要夜郎自大。现在所学的知识已有很多拓展,一定要跳出问题想问题,深处问题核心去解决问题。叶余非很强,可与之共勉。

附录1: model. cpp

#include <cstdio>
#include <algorithm>
#include <cstring>
#define PROGRAM_NAME ""
using namespace std;
template<class TE>inline void readin(TE &res)
{char ch;while ((ch=getchar())<'0'||ch>'9');res=ch-'0';while ((ch=getchar())>='0' && ch<='9')res=(res>>1)+(res>>3)+ch-'0';
}
int main()
{freopen(PROGRAM_NAME".in","r",stdin);freopen(PROGRAM_NAME".out","w",stdout);return 0;
}

附录2: 修改后的color. cpp

#include <cstdio>
#include <algorithm>
#include <cstring>
#define PROGRAM_NAME "color"
using namespace std;
template<class TE>inline void readin(TE &res)
{char ch;while ((ch=getchar())<'0'||ch>'9');res=ch-'0';while ((ch=getchar())>='0' && ch<='9') res=(res<<1)+(res<<3)+ch-'0';
}
const int MAXN = 100000+10000;
const int MAXM = 250000*2+10000;
const int MAXT = 100000+10000;
struct Edge
{int v, next;
}t[MAXM];
int T, n, m;
int u, v, num, head[MAXN];
int team[MAXT], volk[MAXN];inline void insert(int u, int v)
{t[++num].v=v;t[num].next=head[u];head[u]=num;t[++num].v=u;t[num].next=head[v];head[v]=num;
}
void solve()
{memset(head,0,sizeof(head));memset(volk,-1,sizeof(volk));num=0;readin(n);readin(m);for (int j=1; j<=m; j++){readin(u);readin(v);insert(u,v);}for (int d=1; d<=n; d++) if (volk[d]==-1){team[1]=d;volk[team[1]]=1;for (int front=1,rear=2; front!=rear; front=front%MAXT+1)for (int i=head[team[front]]; i!=0; i=t[i].next)if (volk[t[i].v]==-1){team[rear]=t[i].v;volk[t[i].v]=volk[team[front]]^1;rear=rear%MAXT+1;}else if (volk[t[i].v]==volk[team[front]]){printf("NO\n");return ;}}printf("YES\n");
}
int main()
{freopen(PROGRAM_NAME".in","r",stdin);freopen(PROGRAM_NAME".out","w",stdout);readin(T);for (int i=1; i<=T; i++) solve();return 0;
}

20170117 机房『练习赛』相关推荐

  1. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  2. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

    前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...

  3. 『TensorFlow』命令行参数解析

    argparse很强大,但是我们未必需要使用这么繁杂的东西,TensorFlow自己封装了一个简化版本的解析方式,实际上是对argparse的封装 脚本化调用tensorflow的标准范式: impo ...

  4. 『Numpy』常用方法记录

    numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...

  5. 2018年『web』开发者不得不知的技术趋势

    作为一个『web』开发者,无论是做前端还是后端,都应该时刻保持着对技术的敏感性.技术的流行需要一定时间的沉淀,有哪些web相关的技术会可能会在2018年成为web开发的新宠呢?下面列举业界经过实践并且 ...

  6. 『TensorFlow』函数查询列表_张量属性调整

    博客园 首页 新随笔 新文章 联系 订阅 管理 『TensorFlow』函数查询列表_张量属性调整 数据类型转换Casting 操作 描述 tf.string_to_number (string_te ...

  7. 『TensorFlow』专题汇总

    TensorFlow函数查询 『TensorFlow』0.x_&_1.x版本框架改动汇总 『TensorFlow』函数查询列表_数值计算 『TensorFlow』函数查询列表_张量属性调整 『 ...

  8. 两个构件的重合点_初三物理易错点:你被眼睛欺骗了,那些『平面镜成像』中的困惑...

    时光飞逝,一晃初三的伙伴们已经返校复课一个多月了,想必有很多感慨和困惑吧? 还有的地方初三的伙伴们还没有复课,在家乖乖地学习网课,想必也是有诸多的困惑和不解吧? 今天木木老西跟大家解开物理当中的一个困 ...

  9. 『Numpy』内存分析_高级切片和内存数据解析

    在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...

最新文章

  1. Vue生命周期函数详解
  2. 计算机代码坑人小程序bat,批处理写的关机小程序--bat
  3. Java学习总结:57(Properties子类)
  4. jQuery中增加新元素后没法响应原有的事件
  5. html怎么设置log区,javlog
  6. 浅析jQuery中常用的元素查找方法总结
  7. (转)unity web 缓存解决方案
  8. [ROS-Beginner]1.安装与配置ROS环境
  9. java 性能框架_Java Fork Join 框架(四)性能
  10. 190416每日一句
  11. Struts2中过滤器和拦截器的区别
  12. 什么软件画er图方便_ER模型怎么画?必备入门级模型图绘制软件
  13. #507 Wiggle Sort II
  14. 对计算机硬盘格式化,电脑硬盘格式化和快速格式化的区别
  15. 物理搬砖问题_搬砖问题 - jeff_nie - 博客园
  16. 详解条件概率,全概率,贝叶斯公式
  17. 数据库四种范式和部分依赖,完全依赖,传递依赖
  18. 计算机网络技术表白,网络表白的经典句子
  19. 输入一个字符串,判断它的所有字符中否全部是大写字母,如不是,统计小写字母个数,并将其转换成大写字母后输出
  20. 林达华推荐的数学知识

热门文章

  1. 用python将爬取内容写入csv文件中用excel打开后的乱码问题
  2. 用keytool创建Keystore和Trustsotre文件
  3. 【UE4从零开始 019】蓝图宏库
  4. 怎样规划自己每天的时间,这个时间管理工具来帮你
  5. 钢结构建筑软件:Advance Steel 2024 激活版
  6. 二次开发如何让低代码平台锦上添花?
  7. 华为路由器DHCP地址池的配置
  8. 微信投屏服务器错误啥意思,投屏时候弹出微信消息很可怕?ColorOS TV轻松解决问题...
  9. android 自定义心电图,Android如何实现动态滚动波形图(心电图)功能
  10. Memblaze发布PBlaze 4系列PCIe SSD新品 全面拥抱 NVMe