codevs 版刷计划(1000-1099)
Diamond咋都是模板题。。。
开个坑刷codevs的Master题。巩固一下姿势。
目前AC的题目:1001,1021,1022,
1001.舒适的路线(并查集)
求出无向图s到t路径上的min(最大边权/最小边权).(n<=500,m<=5000)
边权排序一下,枚举最小边,将比它大的边权依次加入并查集直到s和t联通,此时的最大边权一定最小。复杂度O(m^2).
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
# define set pabs
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
, flag=;
char ch;
;
';
+(ch-');
return flag?-res:res;
}
void Out(int a) {
) {putchar('-'); a=-a;}
) Out(a/);
putchar(a%+');
}
;
//Code begin...
typedef struct{int u, v, w;}Node;
Node edge[];
int fa[N];
bool comp(Node a, Node b){return a.w<b.w;}
int find(int x)
{
int s, temp;
; s=fa[s]) ;
while (s!=x) temp=fa[x], fa[x]=s, x=temp;
return s;
}
void union_set(int x, int y)
{
int temp=fa[x]+fa[y];
if (fa[x]>fa[y]) fa[x]=y, fa[y]=temp;
else fa[y]=x, fa[x]=temp;
}
int gcd(int x, int y){return y?gcd(y,x%y):x;}
int main ()
{
];
double answer=INF;
scanf("%d%d",&n,&m);
FOR(i,,m) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
scanf("%d%d",&s,&t);
sort(edge+,edge+m+,comp);
FOR(i,,m) {
mem(fa,-);
mi=edge[i].w; ma=;
FOR(j,i,m) {
u=edge[j].u, v=edge[j].v;
if (find(u)!=find(v)) union_set(find(u),find(v));
if (find(s)==find(t)) {ma=edge[j].w; break;}
}
]=ma/gcd(ma,mi), ans[]=mi/gcd(ma,mi);
}
if (fabs(answer-INF)<eps) puts("IMPOSSIBLE");
else {
]==) printf(]);
],ans[]);
}
;
}
1021.玛丽卡(最短路)
求出图中删一条边后产生的最短路的最大值。(n<=1000)
考虑图中的任何一条最短路,若删除除了这条最短路的其他边,则并无什么卵用,于是我们枚举删除这条最短路的边,更新答案即可。复杂度O(n*m*logm).
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
# define set pabs
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
, flag=;
char ch;
;
';
+(ch-');
return flag?-res:res;
}
void Out(int a) {
) {putchar('-'); a=-a;}
) Out(a/);
putchar(a%+');
}
;
//Code begin...
struct Edge{int p, next, w, flag;}edge[N*N];
struct qnode{
int v, c;
qnode(, ):v(_v),c(_c){}
bool operator <(const qnode &r)const{return c>r.c;}
};
, dis[N], pre[N], bian[N];
bool vis[N];
void add_edge(int u, int v, int w)
{
edge[cnt].p=v; edge[cnt].next=head[u]; edge[cnt].w=w;
edge[cnt].flag=; head[u]=cnt++;
}
void dij(int n, int start, int flag)
{
mem(vis,);
FOR(i,,n) dis[i]=INF;
priority_queue<qnode>que;
while (!que.empty()) que.pop();
dis[start]=; que.push(qnode(start,));
qnode temp;
while (!que.empty()) {
temp=que.top(); que.pop();
int u=temp.v;
if (u==n) break;
if (vis[u]) continue;
vis[u]=true;
for (int i=head[u]; i; i=edge[i].next) {
) continue;
int v=edge[i].p;
int cost=edge[i].w;
if (!vis[v]&&dis[v]>dis[u]+cost) {
dis[v]=dis[u]+cost;
que.push(qnode(v,dis[v]));
if (flag) pre[v]=u, bian[v]=i;
}
}
}
}
int main ()
{
int n, m, u, v, w;
scanf("%d%d",&n,&m);
while (m--) scanf("%d%d%d",&u,&v,&w), add_edge(u,v,w), add_edge(v,u,w);
dij(n,,);
int ans=dis[n];
; i=pre[i]) {
edge[bian[i]].flag=edge[bian[i]^].flag=;
dij(n,,);
ans=max(ans,dis[n]);
edge[bian[i]].flag=edge[bian[i]^].flag=;
}
printf("%d\n",ans);
;
}
1022.覆盖(二分图染色)
求在矩阵中1*2的格子最多能用多少。(n,m<=100)
显然矩阵的格子形成了一个二分图,类似奇偶校验,直接染色一遍,对于每个联通块取颜色的最小值加入答案。复杂度O(n*m).
# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
, flag=;
char ch;
;
';
+(ch-');
return flag?-res:res;
}
void Out(int a) {
) {putchar('-'); a=-a;}
) Out(a/);
putchar(a%+');
}
;
//Code begin...
][]={,,-,,,,,-};
], n, m;
void dfs(int x, int y, int flag)
{
vis[x][y]=flag; se[flag]++;
FO(i,,) {
], py=y+ps[i][];
||px>n||py<||py>m||g[px][py]==||vis[px][py]) continue;
dfs(px,py,-flag);
}
}
int main ()
{
;
scanf("%d%d%d",&n,&m,&k);
;
FOR(i,,n) FOR(j,,m) g[i][j]^=;
FOR(i,,n) FOR(j,,m) &&vis[i][j]==) se[]=se[]=, dfs(i,j,), ans+=min(se[],se[]);
printf("%d\n",ans);
;
}
codevs 版刷计划(1000-1099)的更多相关文章
- 华为G520联通版刷机包 基于MIUI CM11新 平稳 稳定
ROM介绍 刷先配置双卡:"设定-安卓原生设置-双卡套-配置订阅",否则,无信号 使开发人员选项方法:"设定-安卓原生设置-关于手机-发布"连续点击版本 启用A ...
- codevs 2639 约会计划
codevs 2639 约会计划 题目描述 Description cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的 ...
- Arduino开发版学习计划
制定学习开发版的计划,今天先大体过一下整个教程. http://www.bilibili.com/video/av6105302/ 视频中说可以自己制造亦可卫星放上天. Arduino使用C/C++编 ...
- 【小米3使用经验】小米3联通版 miui7.2.11稳定版刷机
1.我的手机是小米3联通版的,买来后为了配合公司的手机开发,将Android系统升级到4.4.4版本,MiUi为默认版本. 前段时间可能不小心开启了自动升级,结果Android系统升级到6.0.1版本 ...
- 华为P7电信4G版刷机包 EMUI2.3 官方B125 第3版 精简 ROOT
ROM介绍 基于底包至 B125 SP03解包制作 增加自己订制的超美丽EMUI 2.3专用的全局主题 自调刷机脚本,全部权限完美百分百与官方原版相贴合. 加入Root权限并使用SuperSU 2.0 ...
- 小米路由器4a千兆版刷openwrt
现在网上搜小米路由器4a千兆版刷机的都是刷的padavan的,很少能找到openwrt的刷机教程. 首先刷openwrt系统的时候要先刷入引导程序breed,网上有一篇帖子写的很详细(https:// ...
- 【codevs】刷题记录→_→(推荐看!)
注:本文是我原先在csdn内写的一篇博文,现转到这里,两篇博文尽量同时更新. //#include<iostream->shuati> //define 为什么刷 学长☞hzwer ...
- Huawei HG556a A版 刷 openwrt
一直想玩玩openwrt,调研了一下 HG556a尽管散热很烂,但性价比超高,于是淘宝入手一台A版,A版和C版区别为wifi芯片: 到货后在网上找了几个教程便开始动手刷openwrt,但刷机的过程中还 ...
- MiUI开发者版刷入xposed框架--简洁方法
一,首先要确定手机是否解锁 可以去这里查看怎么解锁: http://www.miui.com/unlock/index.html 二,手机系统需要是开发者版,且在安全中心的授权管理打开了ROOT授权 ...
随机推荐
- 对css float 浮动的学习心得
css float浮动详解 @(css float)[hasLayout|clear float|妙瞳] css float的定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图 ...
- java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序
如果是发布到weblogic的话,可以在WebContent\WEB-INF\weblogic.xml里面配置.参考配置如下:<?xml version="1.0" enco ...
- 【MINA】序列化和反序列化我们要考虑的问题
概念 序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 要解决的问题 1.序列化时间 2.反序列化时间 3.bytes大小 4.操作方便 ...
- ASP多行多列又一个方法
<table border=1 width="200"> <% col=4 '列数 i=1 Do While i<=100 If i Mod col=1 T ...
- Scala语言初识
scala是一种集面向对象特性和函数式特性于一身并可运行在JVM上的强类型静态语言.因为可以运行在JVM上,并在设计时借鉴于大量的java语言特性,故可以和java互动并可以调用java相关类库,这让 ...
- 禁止button响应回车(.net页面)
1. 深层次来说这不是 ASP.NET 的问题, 而是 html form 的 submit 按钮就是如何设计的. 当你的光标焦点进入某个表单元素的时候,会激活该表单中第一个(流布局顺从左到右,从上至 ...
- Vue.js中Directive知识
近期所学的Vue.js这个MVVM前端技术缓解了我一直愁于前后端开发杂糅所带来的痛苦.今天就来说说关于Vue.js里面的Directive知识. Directive Directive看上去虽然和An ...
- Windows下lex 与 yacc的使用(2)
Windows下lex 与 yacc的使用 ...
- STL的简介
Standard Template Library,(标准模板库)<来自百度百科的整理> ————可复用性(reusability) STL是基于模板,内联函数的使用使得生成的代码短小高效 ...
- 【NOI2001】炮兵阵地
[题目描述] 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形 ...