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授权 ...
随机推荐
- HTML5 服务器发送事件
单向传输:服务器端——>客户端 作用:传回的能每过3s重新刷新一遍.从而能过跟数据库同步,与ajax配合使用 一.客户端写法 必须的用 message 方法 JSON.parse() ...
- RTTI和反射
JAVA 运行时识别对象和类的信息,主要有两种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型:另一种是"反射"机制,它允许我们在运行时发现和使用类的信息. 参考 ...
- Android的自动对焦
1,什么是自动对焦? ---安卓的自动对焦的概念是指能够在指定的位置计算出准确的焦点位置. 这个就好像是传统意义上的手动对焦.但是google是这个意思. 2.什么是追焦? ----安卓的追焦是指FO ...
- DOS批处理命令-@命令
@命令是一个禁止当前语句回显的简单命令. 语法: @[command].[command]是要屏蔽的批处理命令 例如执行包含以下内容的bat文件 echo on @echo ------- @echo ...
- SQL Server(高级) 关键字的使用 二
二, 高级 关键字 -- 使用介绍 8,Top 的使用(Top子句返回记录的数目) select top number|percent column_name(s) from table_name 或 ...
- PHP JQuery Json
PHP: echo Json_encode($result); Jquery: $.get( 'process.php', {'p1':'aa','p2':'dd', 'data_type':'jso ...
- ios -- cell的图片下载
1.面试题 1> 如何防止一个url对应的图片重复下载 * “cell下载图片思路 – 有沙盒缓存” 2> SDWebImage的默认缓存时长是多少? * 1个星期 3> SDWeb ...
- leetcode problem 41 -- First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- 尚学堂JavaEE项目备选
偶然得知:记下待练 微博 软件人才网 论坛 博客系统 京东网上商城 赶集网 拉手网 优酷视频 百度知道(问答) 生产管理系统 房屋租赁网 金融股票
- android的liveview装载数据
设置布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andro ...