好不容易搞来的题目,不写一写怎么行呢。

  不过难度真心不高(一小时K掉),都是老题+暴力题,没有欧洲玄学。

  再说一句,这试卷是叶可禾出的吧。

  T1 好老的题目,看到有多组数据我还怕了,以为有更流弊的算法。没想到减了数据范围。

  首先把边sort一遍,因为要求,max-min最小,所以枚举最短边,然后向后找到第一条满足联通的边即可。

  联通的话通过并查集就可以实现。

  (没有联通要输-1,题目里没说)

  CODE

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=,M=,INF=;
struct data
{
int l,r,s;
}e[M];
int father[N],i,j,n,m,ans,s,t,q;
bool flag;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void write(int x)
{
if (x/) write(x/);
putchar(x%+'');
}
inline int comp(data a,data b) { return a.s<b.s; }
inline int getfather(int k) { return father[k]==k?k:father[k]=getfather(father[k]); }
int main()
{
freopen("find.in","r",stdin); freopen("find.out","w",stdout);
read(n); read(m);
for (i=;i<=m;++i)
read(e[i].l),read(e[i].r),read(e[i].s);
sort(e+,e+m+,comp);
read(q);
while (q--)
{
read(s); read(t);
ans=INF;
for (i=;i<=m;++i)
{
for (j=;j<=n;++j)
father[j]=j;
flag=;
for (j=i;j<=m;++j)
{
int fx=getfather(e[j].l),fy=getfather(e[j].r);
father[fx]=fy;
if (getfather(s)==getfather(t)) { flag=; break; }
}
if (e[j].s-e[i].s<ans&&flag) ans=e[j].s-e[i].s;
}
if (ans==INF) puts("-1"); else write(ans),putchar('\n');
}
return ;
}

  T2 看这数据范围,看着猥琐的要求最大值。这就是一道传统的O(n^2) DP;

  用f[i][j]表示取到第i行第j列时最大值,so

  f[i][j]=max f[i-1][j-1]+a[i][j] (选a[i][j]这个点)

        f[i][j-1](不选a[i][j]这个点)

  注意第i行的花纵坐标至少要从i开始枚举

  因为DP顺序和读入顺序相同,所以可以一边读一边做

  CODE

#include<cstdio>
using namespace std;
const int N=;
int n,m,x,f[N][N],ans=-,i,j;
inline void read(int &x)
{
x=; char ch=getchar(); int flag=;
while (ch<''||ch>'') { if (ch=='-') flag=-; ch=getchar(); }
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
x*=flag;
}
inline int max(int a,int b) { return a>b?a:b; }
int main()
{
freopen("flowers.in","r",stdin); freopen("flowers.out","w",stdout);
read(n); read(m);
for (i=;i<=n;++i)
for (j=;j<=m;++j)
{
read(x);
if (j<i) continue;
if (j==) f[i][j]=x; else f[i][j]=max(f[i-][j-]+x,f[i][j-]);
}
printf("%d",f[n][m]);
return ;
}

  (刚开始把读优打错了)

  T3 感觉是一道很老的题目。

  只需要维护一个队列,当队尾与队头之间的距离大于d时弹出即可。

  每次ans+=tail-head即可。

  注意将坐标排序一遍。

  CODE

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e6+;
int n,d,ans,i,s[N],q[N],head=,tail=;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
int main()
{
freopen("spock.in","r",stdin); freopen("spock.out","w",stdout);
read(n); read(d);
for (i=;i<=n;++i)
read(s[i]);
sort(s+,s+n+);
q[]=s[];
for (i=;i<=n;++i)
{
q[++tail]=s[i];
while (q[tail]-q[head]>d&&tail>head) ++head;
ans+=tail-head;
}
printf("%d",ans);
return ;
}

  T4 最值得思考也最值得骂人的一道题。

  看到题目和最近打过的一道并查集补集的题目很想像(Luogu 关押罪犯)然后没有犹豫地敲了并查集。

  然后发现还要输出方案这一茬。

  删光,又发现照样可以套染色的板子,然后奋不顾身地敲了一个BFS版本的,但发现只能直接跳出但不能统计个数。

  所以只好用超级不熟悉的DFS版本了。

  代码很简单(很容易背),用一个数组表示这个数是否使用,再用一个数组记录前面到这个点有多少条边(有边就不能加入队里)。

  之后回溯寻找即可(玄学复杂度)

  CODE

#include<cstdio>
#include<vector>
using namespace std;
const int N=;
vector <int> a[N];
int col[N],n,m,i,x,y,ans,q[N],tot;
bool v[N],p[N];
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void copy()
{
for (int i=;i<=n;++i)
p[i]=v[i];
}
inline void dfs(int k)
{
if (k==n+) { if (tot>ans) ans=tot,copy(); return; }
if (!q[k])
{
v[k]=;
tot++;
for (int i=;i<a[k].size();++i)
q[a[k][i]]++;
dfs(k+);
v[k]=;
tot--;
for (int i=;i<a[k].size();++i)
q[a[k][i]]--;
}
dfs(k+);
}
int main()
{
freopen("tribe.in","r",stdin); freopen("tribe.out","w",stdout);
read(n); read(m);
for (i=;i<=m;++i)
{
read(x); read(y);
a[x].push_back(y); a[y].push_back(x);
}
dfs();
printf("%d\n",ans);
for (i=;i<=n;++i)
if (p[i]) printf("%d ",); else printf("%d ",);
return ;
}

HW 2017 12 17可禾大佬神题的更多相关文章

  1. EZ 2017 12 17初二初三第一次膜你赛

    以后平时练习还是写一写吧. (题目搞来搞去太烦了,直接PDF存起来) T1 水题(???),主要是数据水,正解是设一个阙值,然而根本没人打.(暴力出奇迹) CODE #include<cstdi ...

  2. 2017.12.17 servlet 生命周期

    servlet生命周期一般分为4个: 加载----实例化------服务-----销毁 (1)加载: 加载一般是在运行tomcat容器时来完成,将servlet类加载到tomcat中,或者是客户端发来 ...

  3. 2017.9.17校内noip模拟赛解题报告

    预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...

  4. 更新日志(建议升级到2016.12.17) && 更新程序的方法

    更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  5. centos 6.5 升级内核 linux 3.12.17 (笔记 实测)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...

  6. centos 6.5 升级内核 linux 3.12.17

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...

  7. docker安装升级linux内核(2.6.32->3.12.17)

    1.内核升级环境准备 #查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库:yum grouplist#一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具yum ...

  8. Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)

    Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...

  9. 【2017.12.12】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE

    U盘要求为 FAT32,MBR分区表 如果需要放 4GB 大文件,可以分两个分区,第一分区FAT32格式,放启动相关文件,第二个分区用 NTFS 格式,放其它资料. 最新 Win10 支持显示 U盘 ...

随机推荐

  1. Prometheus Node_exporter 之 Network Traffic Detail

    Network Traffic Detail /proc/net/dev 1. Network Traffic by Packets type: GraphUnit: packets/secLabel ...

  2. jmeter教程--简单的做压力测试

    Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 什么是压力测试 顾名思义:压力测试,就是  被测试的系统,在 ...

  3. Resource View Window of Visual Studio

    https://msdn.microsoft.com/en-us/library/d4cfawwc.aspx For the latest documentation on Visual Studio ...

  4. ZooKeeper 数据结构 & 命令

    0. 说明 记录 ZooKeeper 数据结构 & 命令 1. ZooKeeper  数据结构 ZooKeeper 特性: ZooKeeper 文件系统以 / 为根目录,文件系统为树形结构,每 ...

  5. 【转】Java学习---Java的锁和Mysql的锁机制

    [原文]https://www.toutiao.com/i6593861446428262916/ Java和数据库的锁机制 https://www.toutiao.com/i659386144642 ...

  6. trait代码复用

    在面对对象编程中我们经常通过继承来解决部分代码多次出现的问题 php支持单继承,有时候由于不相关联的两个类的方法相同我们需要进行继承操作, trait可以实现不继承的情况下复用代码 trait的使用类 ...

  7. IIS 安全设置

    这近网站中毒,以下把IIS安全设置记录一下,以便查阅. 1.对于不需要执行的目录,将处理程序映射中的编辑功能权限中的脚本去掉,这样即使上传了木马文件在此目录,也是无法执行的. 删除IIS默认的匿名用户 ...

  8. DAU、UV、独立IP、PV的区别和联系

    基本概念 DAU(Daily Active User)日活跃用户数量.常用于反映网站.互联网应用或网络游戏的运营情况.DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户 ...

  9. C++第七次作业

    关于计算器项目的总结: 一.就目前完成的计算器,包括界面的实现这部分,总体实现了简单计算的功能,但仍有很多不足之处: 需改进完善之处:1.关于界面可再优化: 2.界面放大时,无法自动聚焦(按钮等控件无 ...

  10. [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project SSMMavenPro: configfile D:\java\PermissionPro\src\main\resources\generatorCo

    看看自己的generatorConfig.xml文件是否放错,反正我不小心resources文件放在src目录下,并没有放在main目录下,所有找不带该文件