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

  不过难度真心不高(一小时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. idea 关联 jdk

    1.打开IntelliJ IDEA 2.选择 "File" 菜单 3.找到 "other settings" 4.选择 “Structure for new P ...

  2. SQLSERVER中的元数据锁

    SQLSERVER中的元数据锁 网上对于元数据锁的资料真的非常少 元数据锁一般会出现在DDL语句里 下面列出数据库引擎可以锁定的资源 资源 说明 RID 用于锁定堆(heap)中的某一行 KEY 用于 ...

  3. Prometheus Node_exporter 之 Network Netstat UDP

    Network Netstat UDP /proc/net/snmp 1. UDP In / Out type: GraphUnit: shortLabel: Datagrams out (-) / ...

  4. SQL Server 2012 列存储索引分析(转载)

    一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...

  5. 获取指定时间的Date对象,IE和Chrome的区别(兼容IE)

    网上的大多教程都是 new Date("2016-08-03 00:00:00"); 其实这是Chrome的写法,在IE中并不起作用,在IE中应为 new Date("2 ...

  6. 高通 display 驱动【转】

    高通display驱动 0. 关键字 MDSS : 高通平台lcd multimedia Display sub system DSI: Display Serial Interface qcom,m ...

  7. Windows10 家庭版没有本地组策略解决方法

    windows 家庭版默认是没有本地组策略的, win+R运行gpedit.msc提示不存在 下面的代码保存一个cmdorbat 脚本文件add_gpedit.cmd, 并执行 add_gpedit. ...

  8. 读高性能JavaScript编程 第四章 Duff's Device

    又要开始罗里吧嗦的 第四章  Summary 了. 这一次我尽量精简语言. 如果你认为 重复调用一个方法数次有点辣眼睛的话 比如: function test(i){ process(i++); pr ...

  9. laravel上传图片报错

    在laravel的上传图片代码文件中路径如下: vendor\stevenyangecho\laravel-u-editor\src\Uploader\Upload.php第131行有一句代码错误$r ...

  10. 【Ansible 文档】【译文】入门教程

    http://docs.ansible.com/ansible/latest/intro_getting_started.html Foreword 前言 到这里,你应该已经安装了Ansible,是时 ...