D. Maximum Diameter Graph

题意

给出每个点的最大度,构造直径尽可能长的树

思路

让度数大于$1$的点构成链,考虑是否能在链的两端加度为$1$的点

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
const int maxn = 1e3+5;
using namespace std;
typedef long long LL; int n; struct node{
int id,val;
}a[maxn]; bool cmp(node a,node b){
return a.val > b.val;
}
vector<pair<int,int> >vec; int main(){
scanf("%d",&n);
int sum=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i].val);
sum+=a[i].val;
a[i].id=i;
}
if(sum < (n-1)*2){puts("NO");return 0;}
sort(a+1,a+1+n,cmp);
int pos=n,cnt=0;
for(int i=1;i<=n;i++){
if(a[i].val > 1)cnt++;
else{pos=i-1;break;}
}
for(int i=2;i<=pos;i++){
vec.push_back({a[i].id,a[i-1].id});
a[i].val--;
a[i-1].val--;
}
int ans=pos-1;
if(pos != n){
vec.push_back({a[1].id,a[pos+1].id});
a[1].val--;
a[pos+1].val--;
ans++;
}
int flag=0;
for(int j=pos+1;j<=n;j++){
for(int i=pos;i>=1;i--){
if(a[j].val == 0)break;
if(a[i].val == 0)continue;
vec.push_back({a[j].id,a[i].id});
a[j].val--;
a[i].val--;
if(flag == 0 && i == pos){flag=1;ans++;}
}
}
printf("YES %d\n",ans);
printf("%d\n",vec.size());
for(int i=0;i<vec.size();i++){
printf("%d %d\n",vec[i].first,vec[i].second);
}
return 0;
}

E. Increasing Frequency

题意

让某段区间的数字加上某个值使最终等于$c$的数尽可能多

思路

从左往右枚举左边区间最优情况下的情况,考虑与当前左区间右边界相同的值变成c的情况,维护$ans$

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
const int maxn = 5e5+5;
using namespace std;
typedef long long LL; LL n,k,a[maxn];
LL pre[maxn],suf[maxn],expre[maxn],last[maxn]; int main(){
scanf("%I64d%I64d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%I64d",&a[i]);
if(a[i] == k)pre[i]++,suf[i]++;
}
for(int i=1;i<=n;i++)pre[i]+=pre[i-1];
for(int i=n;i>=1;i--)suf[i]+=suf[i+1];
for(int i=1;i<=n;i++){
expre[i]=pre[i-1]+1;
int pos=last[a[i]];
if(pos)expre[i]=max(expre[i],expre[pos]+1);
last[a[i]]=i;
}
LL ans=0;
for(int i=1;i<=n+1;i++)ans=max(ans,expre[i-1]+suf[i]);
printf("%I64d\n",ans);
return 0;
}

G. Petya and Graph

题意

找到这样的子图满足图内的边只连接图内的点,求最大权值

思路

最大权闭合子图板题,不知道是什么可以看这个博客,bzoj上甚至有原题(这题还不爆int

代码

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL inf = 1e18;
const LL maxn = 1e5+5; struct Dinic {
static const LL maxn = 1e5+5;
static const LL maxm = 4e5+5; struct Edge {
LL u, v, next, flow, cap;
} edge[maxm*2]; LL head[maxn], level[maxn], cur[maxn], eg; void addedge(LL u, LL v, LL cap) {
edge[eg]={u,v,head[u],0,cap},head[u]=eg++;
edge[eg]={v,u,head[v],0, 0},head[v]=eg++;
}
void init() {
eg = 0;
memset(head, -1, sizeof head);
}
bool makeLevel(LL s, LL t, LL n) {
for(int i = 0; i < n; i++) level[i] = 0, cur[i] = head[i];
queue<LL> q; q.push(s);
level[s] = 1;
while(!q.empty()) {
int u = q.front();
q.pop();
for(LL i = head[u]; ~i; i = edge[i].next) {
Edge &e = edge[i];
if(e.flow < e.cap && level[e.v] == 0) {
level[e.v] = level[u] + 1;
if(e.v == t) return 1;
q.push(e.v);
}
}
}
return 0;
}
LL findpath(LL s, LL t, LL limit = inf) {
if(s == t || limit == 0) return limit;
for(LL i = cur[s]; ~i; i = edge[i].next) {
cur[edge[i].u] = i;
Edge &e = edge[i], &rev = edge[i^1];
if(e.flow < e.cap && level[e.v] == level[s] + 1) {
int flow = findpath(e.v, t, min(limit, e.cap - e.flow));
if(flow > 0) {
e.flow += flow;
rev.flow -= flow;
return flow;
}
}
}
return 0;
}
LL max_flow(int s, int t, int n) {
LL ans = 0;
while(makeLevel(s, t, n)) {
LL flow;
while((flow = findpath(s, t)) > 0) ans += flow;
}
return ans;
}
} di; LL n,m,st,en;
LL a[maxn]; int main() {
di.init();
scanf("%I64d%I64d",&n,&m);
st=0,en=n+m+1;
for(int i=1;i<=n;i++){
scanf("%I64d",&a[i]);
di.addedge(i,en,a[i]);
}
LL sum=0;
for(int i=1;i<=m;i++){
LL x,y,z;
scanf("%I64d%I64d%I64d",&x,&y,&z);
di.addedge(st,i+n,z);
di.addedge(i+n,x,inf);
di.addedge(i+n,y,inf);
sum+=z;
}
printf("%I64d\n",sum-di.max_flow(st,en,en+1));
return 0;
}

  

Educational Codeforces Round 55 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 55 (Rated for Div. 2) C. Multi-Subject Competition 【vector 预处理优化】

    传送门:http://codeforces.com/contest/1082/problem/C C. Multi-Subject Competition time limit per test 2 ...

  2. Educational Codeforces Round 55 (Rated for Div. 2) A/B/C/D

    http://codeforces.com/contest/1082/problem/A WA数发,因为默认为x<y = = 分情况讨论,直达 or x->1->y  or  x-& ...

  3. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】

    传送门:http://codeforces.com/contest/1082/problem/B B. Vova and Trophies time limit per test 2 seconds ...

  4. Codeforces 1082 C. Multi-Subject Competition-有点意思 (Educational Codeforces Round 55 (Rated for Div. 2))

    C. Multi-Subject Competition time limit per test 2 seconds memory limit per test 256 megabytes input ...

  5. Codeforces 1082 A. Vasya and Book-题意 (Educational Codeforces Round 55 (Rated for Div. 2))

    A. Vasya and Book time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. Educational Codeforces Round 55 (Rated for Div. 2):E. Increasing Frequency

    E. Increasing Frequency 题目链接:https://codeforces.com/contest/1082/problem/E 题意: 给出n个数以及一个c,现在可以对一个区间上 ...

  7. Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph

    D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...

  8. Educational Codeforces Round 55 (Rated for Div. 2):C. Multi-Subject Competition

    C. Multi-Subject Competition 题目链接:https://codeforces.com/contest/1082/problem/C 题意: 给出n个信息,每个信息包含专业编 ...

  9. Educational Codeforces Round 55 (Rated for Div. 2)E

    题:https://codeforces.com/contest/1082/problem/E 题意:给出n个数和一个数c,只能操作一次将[L,R]之间的数+任意数,问最后该序列中能存在最多多少个c ...

随机推荐

  1. idea spring-boot总结

    1. 按自己重新配置spring-boot pom点进 mybatis-spring-boot-starter ,在要改的里面 <version>3.4.4</version> ...

  2. 关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转

    情景: 在进行正常页面跳转操作后(页面A跳转到页面B),点击浏览器的左上角的‘后退’按钮,点击后,可以看到url地址已经发生了变化(url由页面B变为页面A),hash值也已经是上一页的路由,但是浏览 ...

  3. GIL全局解释器锁

    1. 什么是GIL全局解释器锁 GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程     必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即 ...

  4. python小白——进阶之路——day1天---认识python和变量、注释

    ###-python的认知 89年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido) (1)版本: python2.x原码不规范,重复较多 python3x:原码 ...

  5. <转>性能测试指标

    下午在家看书,清理收藏栏的内容,翻出来几篇去年收藏的博文,此时再看,真切的感觉到了自己这一年的成长,分享出来,希望看到的童鞋都能有所得,就好... 原文地址:性能测试指标 一.通用指标 指Web应用服 ...

  6. Linux内存管理 (12)反向映射RMAP

    专题:Linux内存管理专题 关键词:RMAP.VMA.AV.AVC. 所谓反向映射是相对于从虚拟地址到物理地址的映射,反向映射是从物理页面到虚拟地址空间VMA的反向映射. RMAP能否实现的基础是通 ...

  7. Eclipse 查看 WebService 服务请求和响应消息

    每个WebService 对入参和返参都是有自己的要求的:别人调用我的WebService,需要按照我的要求进行传参.当我返回数据时,我也得告诉别人,我的返回数据是怎样组织的,方便别人读取. 那怎样查 ...

  8. Linux--主从复制

    一 . mysql+centos7 mariadb mariadb其实是跟mysql是一样的,只不过是在centos7上叫做mariadb, 主要是因为mysql被甲骨文公司收购后,可能会有闭源的风险 ...

  9. socket之黏包

    一.黏包成因 1.tcp协议的拆包机制 当发送端缓冲区的长度大于网卡的MTU时,tcp会将这次发送的数据拆成几个数据包发送出去. MTU是Maximum Transmission Unit的缩写.意思 ...

  10. python学习day10 函数Ⅱ(参数&作用域)

    函数Ⅱ(参数&作用域) 知识小结: py2与py3的区别 逻辑运算()>not>and>or 字符串翻转切片翻转 is与==区别 git相关 数据类型判断 操作系统:cent ...