NIKKEI Programming Contest 2019 翻车记
A:签到。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
- int read()
- {
- int x=0,f=1;char c=getchar();
- while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
- while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
- return x*f;
- }
- int n,a,b;
- int main()
- {
- /*freopen("a.in","r",stdin);
- freopen("a.out","w",stdout);*/
- n=read(),a=read(),b=read();
- cout<<min(a,b)<<' '<<max(0,a+b-n);
- return 0;
- }
B:签到。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
- int read()
- {
- int x=0,f=1;char c=getchar();
- while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
- while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
- return x*f;
- }
- #define N 110
- int n;
- char a[N],b[N],c[N];
- int main()
- {
- /*freopen("a.in","r",stdin);
- freopen("a.out","w",stdout);*/
- n=read();
- scanf("%s",a+1);scanf("%s",b+1);scanf("%s",c+1);
- int ans=0;
- for (int i=1;i<=n;i++)
- {
- if (a[i]==b[i]&&b[i]==c[i]) ;
- else if (a[i]==b[i]||a[i]==c[i]||b[i]==c[i]) ans++;
- else ans+=2;
- }
- cout<<ans;
- return 0;
- }
C:考虑一种菜自己吃和对方吃的收益差,于是显然按ai+bi排序从大到小选即可。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
- int read()
- {
- int x=0,f=1;char c=getchar();
- while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
- while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
- return x*f;
- }
- #define N 300010
- #define ll long long
- int n;
- struct data
- {
- int x,y;
- bool operator <(const data&a) const
- {
- return x+y<a.x+a.y;
- }
- }a[N];
- ll ans;
- int main()
- {
- /*freopen("a.in","r",stdin);
- freopen("a.out","w",stdout);*/
- n=read();
- for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
- sort(a+1,a+n+1);reverse(a+1,a+n+1);
- for (int i=1;i<=n;i++)
- if (i&1) ans+=a[i].x;
- else ans-=a[i].y;
- cout<<ans;
- return 0;
- }
D:显然图仍是一个DAG,其中度数为0的点是原树的根。由于图中没有重边,瞎考虑一下容易发现,对于每一个点,由根到它的最长路上该点的前驱即为其在原树中的父亲。拓扑排序一下即可。开始写了个不知道啥玩意于是比E晚了10min。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
- int read()
- {
- int x=0,f=1;char c=getchar();
- while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
- while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
- return x*f;
- }
- #define N 300010
- #define ll long long
- int n,m,p[N],fa[N],deep[N],degree[N],q[N],t,root;
- bool flag[N];
- struct data{int to,nxt;
- }edge[N];
- void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
- void topsort()
- {
- int head=0,tail=0;
- for (int i=1;i<=n;i++) if (!degree[i]) q[++tail]=i;
- while (tail<n)
- {
- int x=q[++head];
- for (int i=p[x];i;i=edge[i].nxt)
- {
- degree[edge[i].to]--;
- if (deep[x]+1>deep[edge[i].to])
- {
- deep[edge[i].to]=deep[x]+1;
- fa[edge[i].to]=x;
- }
- if (!degree[edge[i].to]) q[++tail]=edge[i].to;
- }
- }
- }
- int main()
- {
- n=read(),m=read();
- for (int i=1;i<n+m;i++)
- {
- int x=read(),y=read();
- addedge(x,y);degree[y]++;
- }
- topsort();
- for (int i=1;i<=n;i++) printf("%d\n",fa[i]);
- return 0;
- }
E:显然从大到小考虑每条边是否需要删即可,但删边的过程中难以维护连通块信息。注意到只有MST的边会对最后所得图的连通性产生影响。于是求出MST,然后可以从大到小删边用LCT维护,但这样显然比较毒瘤。事实上还可以建出kruskal重构树,从大到小考虑每条边,如果其在重构树的父亲不需要被删掉,显然其也不需要被删掉;否则此时其所在连通块即为其在重构树上的子树,判断一下是否需要删掉即可。这样就得到了最后的连通信息,最后再考虑每条边是否保留即可。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
- int read()
- {
- int x=0,f=1;char c=getchar();
- while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
- while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
- return x*f;
- }
- #define N 400010
- #define ll long long
- int n,m,a[N],fa[N],id[N],cnt,ans;
- bool isdel[N],flag[N];
- ll value[N<<2];
- struct data
- {
- int x,y,z;
- bool operator <(const data&a) const
- {
- return z<a.z;
- }
- }e[N];
- int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
- namespace kruskal_tree
- {
- int p[N<<2],t,degree[N<<2],fa[N<<2];
- ll size[N<<2];
- struct data{int to,nxt;}edge[N<<2];
- void addedge(int x,int y){t++;degree[y]++;fa[y]=x;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
- void link(int x,int y,int i)
- {
- id[i]=++cnt;addedge(cnt,x),addedge(cnt,y);
- }
- void dfs(int k)
- {
- size[k]=a[k];
- for (int i=p[k];i;i=edge[i].nxt)
- {
- dfs(edge[i].to);
- size[k]+=size[edge[i].to];
- }
- }
- void build()
- {
- for (int i=1;i<=cnt;i++)
- if (!degree[i]) dfs(i);
- }
- void del()
- {
- isdel[0]=1;
- for (int i=m;i>=1;i--)
- if (flag[i]&&isdel[fa[id[i]]]&&e[i].z>size[id[i]]) isdel[id[i]]=1;
- }
- }
- void dfs(int k)
- {
- for (int i=kruskal_tree::p[k];i;i=kruskal_tree::edge[i].nxt)
- {
- dfs(kruskal_tree::edge[i].to);
- if (!isdel[k]) fa[find(kruskal_tree::edge[i].to)]=k;
- }
- }
- int main()
- {
- n=read(),m=read();
- for (int i=1;i<=n;i++) a[i]=read();
- for (int i=1;i<=m;i++) e[i].x=read(),e[i].y=read(),e[i].z=read();
- sort(e+1,e+m+1);
- for (int i=1;i<=4*n;i++) fa[i]=i;cnt=n;
- for (int i=1;i<=m;i++)
- {
- int p=find(e[i].x),q=find(e[i].y);
- if (p!=q) kruskal_tree::link(p,q,i),fa[p]=fa[q]=id[i],flag[i]=1;
- }
- kruskal_tree::build();
- kruskal_tree::del();
- for (int i=1;i<=cnt;i++) fa[i]=i;
- for (int i=1;i<=cnt;i++)
- if (!kruskal_tree::degree[i]) dfs(i);
- for (int i=1;i<=m;i++)
- if (find(e[i].x)==find(e[i].y)&&kruskal_tree::size[find(e[i].x)]>=e[i].z) ans++;
- cout<<m-ans;
- return 0;
- }
result:rank 132 rating +84
NIKKEI Programming Contest 2019 翻车记的更多相关文章
- AISing Programming Contest 2019 翻车记
A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> ...
- [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
[AtCoder] NIKKEI Programming Contest 2019 本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...
- AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)
题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...
- atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges
题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...
- 【AtCoder】全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019
感觉最近好颓,以后不能这么颓了,要省选了,争取省选之前再板刷一面ATC??? A - Subscribers 简单容斥 #include <bits/stdc++.h> #define f ...
- Dwango Programming Contest V 翻车记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)
题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e 题意:给出一个 n 个点 m 条边的无向图,每个点和每 ...
- [AtCoder] Yahoo Programming Contest 2019
[AtCoder] Yahoo Programming Contest 2019 很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...
- Yahoo Programming Contest 2019 自闭记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
随机推荐
- 任务调度工具Quartz入门笔记
一,导包 1)官网下载:http://www.quartz-scheduler.org/downloads/ 2)Maven <dependency> <groupId>org ...
- zookeeper-操作与应用场景-《每日五分钟搞定大数据》
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- nodeJs配置
1. vi /etc/profile export NODE_HOME=/opt/node-v6.9.1-linux-x64export PATH=$PATH:$NODE_HOME/binexpor ...
- python线程中的全局变量与局部变量
在python多线程开发中,全局变量是多个线程共享的数据,局部变量是各自线程的,非共享的. 如下几种写法都是可以的: 第一种:将列表当成参数传递给线程 from threading import Th ...
- InvalidDataAccessResourceUsageException:mysql保留字引发的血案
org.springframework.dao.InvalidDataAccessResourceUsageException: could NOT EXECUTE statement; SQL [n ...
- Windows系统,文件和文件夹命名规则:
不能包含:< > / \ | : * ? windows中,文件名(包括扩展名)可高达 个字符.文件名可以包含除 ? “ ”/ \ < > * | : 之外的大多数字符:保留文 ...
- 【转】linux if 判断
UNIX Shell 里面比较字符写法: -eq 等于-ne 不等于-gt 大于-lt 小于-le 小于等于-ge 大于等于-z 空串= 两个字符相等!= ...
- 利用php查看某个服务的进程数
查看进程就是使用ps命令而已,只不顾ps的参数太多了. 使用php查询的话,必须要开启几个函数(可以执行外部程序的函数),参考官网:http://php.net/manual/zh/book.exec ...
- java list 去重
Guava ImmutableSet源码去重处理,Hash处理 - 汪小哥 - CSDN博客 https://blog.csdn.net/u012881904/article/details/6895 ...
- asp.net Json序列化
Json作为一种数据传输格式与标准被广泛的使用在项目开发中,可以说简直离不开它.那么怎么来生成JSON格式的数据就成了我们首先需要解决的问题这里我们使用.net. 首先是获取数据 public ban ...