Codeforces 1082 毛毛虫图构造&最大权闭合子图
A
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = , MAXM = ;
//int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], ed = 1;
//int cost[MAXM << 1];
//inline void addedge(int u, int v, int c)
//{
// to[++ed] = v;
// nxt[ed] = Head[u];
// cost[ed] = c;
// Head[u] = ed;
//}
inline void read(ll &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '') {
if (c == '-') {
p = -;
}
c = getchar();
}
while (c >= '' && c <= '') {
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
int main()
{
ll T;
read(T);
while (T--) {
ll n, x, y, d;
read(n), read(x), read(y), read(d);
ll cha = abs(x - y);
if (cha % d == ) {
ll ans = cha / d;
printf("%I64d\n", ans);
continue;
} else {
ll anser = LLONG_MAX;
ll ans1, ans2;
ans1 = ans2 = LLONG_MAX;
if ((y - ) % d == ) {
ans1 = (x - ) / d;
if ((x - ) % d) {
ans1++;
}
ans1 += (y - ) / d;
}
if ((n - y) % d == ) {
ans2 = (n - x) / d;
if ((n - x) % d) {
ans2++;
}
ans2 += (n - y) / d;
}
anser = min(anser, min(ans1, ans2));
if (anser == LLONG_MAX) {
printf("-1\n");
} else {
printf("%I64d\n", anser);
}
}
}
}
B
注意一下坑点即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = , MAXM = ;
//int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], ed = 1;
//int cost[MAXM << 1];
//inline void addedge(int u, int v, int c)
//{
// to[++ed] = v;
// nxt[ed] = Head[u];
// cost[ed] = c;
// Head[u] = ed;
//}
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '') {
if (c == '-') {
p = -;
}
c = getchar();
}
while (c >= '' && c <= '') {
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
vector<pair<int, char> > anss;
queue<pair<int, char> > que;
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n;
cin >> n;
string a;
cin >> a;
pair<int, char> cnt, zz;
cnt.first = cnt.second = ;
int sum = ;
for (int i = ; i <= n; i++) {
if (i == n) {
anss.push_back(cnt);
break;
}
if (a[i] != cnt.second) {
if (cnt.first != ) {
anss.push_back(cnt);
}
cnt.first = ;
cnt.second = a[i];
} else {
cnt.first++;
}
}
int sz = anss.size();
for (int i = ; i < sz; i++) {
if (anss[i].second == 'G') {
sum += anss[i].first;
}
}
int ans = ;
for (int i = ; i < sz; i++) {
cnt = anss[i];
if (cnt.second == 'G') {
if (cnt.first == sum) {
ans = max(ans, cnt.first);
} else {
ans = max(ans, cnt.first + );
}
} else {
if (cnt.first == ) {
if (i > && i < sz - ) {
ans = max(ans, anss[i - ].first + anss[i + ].first);
if (anss[i - ].first + anss[i + ].first != sum) {
ans = max(ans, anss[i - ].first + anss[i + ].first + );
}
}
}
}
}
cout << ans << endl;
}
C
sort一下算下贡献即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = , MAXM = ;
//int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], ed = 1;
//int cost[MAXM << 1];
//inline void addedge(int u, int v, int c)
//{
// to[++ed] = v;
// nxt[ed] = Head[u];
// cost[ed] = c;
// Head[u] = ed;
//}
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '') {
if (c == '-') {
p = -;
}
c = getchar();
}
while (c >= '' && c <= '') {
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
int pre[];
vector<int> num[];
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n, m;
cin >> n >> m;
int u, v;
for (int i = ; i <= n; i++) {
cin >> u >> v;
num[u].push_back(v);
}
for (int i = ; i <= m; i++) {
if (num[i].size()) {
sort(num[i].begin(), num[i].end());
}
}
int ans = ;
for (int i = ; i <= m; i++) {
int len = num[i].size();
if (len) {
int sum = ;
for (int j = ; j < len; j++) {
sum += num[i][len - j - ];
//cout<<i<<" "<<j<<" "<<sum<<endl;
if (sum > ) {
pre[j + ] += sum;
} else {
break;
}
}
}
}
for (int i = ; i <= ; i++) {
ans = max(ans, pre[i]);
}
cout << ans << endl;
}
D
构造题 毛毛虫图
#include<bits/stdc++.h>
using namespace std;
const int MAXN = ;
inline void read(int &v) {
v = ;
char c = ;
int p = ;
while (c < '' || c > '') {
if (c == '-') {
p = -;
}
c = getchar();
}
while (c >= '' && c <= '') {
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
int n, m, a[MAXN], b[MAXN], f[MAXN], s[MAXN], t[MAXN], an, sm, T, z;
int main() {
int i, j = , a1, a2, e = ;
read(n);
for (int i = ; i <= n; i++) {
read(a[i]);
sm += a[i];
}
if (sm < n * - ) {
cout << "NO" << endl;
return ;
}
for (int i = ; i <= n; i++) {
if (a[i] >= ) {
f[i] = ;
b[++z] = i;
if (z >= ) {
s[z] = b[z - ];
t[z] = i;
}
}
}
for (int i = ; i <= z; i++) {
a[b[i]] -= (i != ) + (i != z);
}
cout << "YES " << min(z + , n - ) << endl << n - << endl;
for (int i = ; i <= n; i++) {
if (a[i] == && !f[i]) {
if (!e) {
e = ;
a[b[z]]--;
s[++z] = i;
t[z] = b[z - ];
} else {
for (; !a[b[j]]; j++);
a[b[j]]--;
s[++z] = i;
t[z] = b[j];
}
}
}
for (int i = ; i <= n; i++) {
cout << s[i] << " " << t[i] << endl;
}
}
G
把每条边当做一个点 搞最大权闭合子图即可
//Netflow dumpling
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = ;
const int MAXM = ;
const ll INF = ;
ll Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << ], nxt[MAXM << ], ed, S, T;
ll f[MAXM << ];
inline void addedge(int u, int v, ll cap)
{
to[++ed] = v;
nxt[ed] = Head[u];
Head[u] = ed;
f[ed] = cap;
to[++ed] = u;
nxt[ed] = Head[v];
Head[v] = ed;
f[ed] = ;
return;
}
inline bool BFS()
{
int u;
memset(lev, -, sizeof(lev));
queue<int>q;
lev[S] = ;
q.push(S);
while (q.size()) {
u = q.front();
q.pop();
for (int i = Head[u]; i; i = nxt[i])
if (f[i] && lev[to[i]] == -) {
lev[to[i]] = lev[u] + ;
q.push(to[i]);
/*
if (to[i] == T)
{
return 1;
}
magic one way optimize
*/
}
}
memcpy(cur, Head, sizeof Head);
return lev[T] != -;
}
inline ll DFS(int u, ll maxf)
{
if (u == T || !maxf) {
return maxf;
}
ll cnt = ;
for (ll &i = cur[u], tem; i; i = nxt[i])
if (f[i] && lev[to[i]] == lev[u] + ) {
tem = DFS(to[i], min(maxf, f[i]));
maxf -= tem;
f[i] -= tem;
f[i ^ ] += tem;
cnt += tem;
if (!maxf) {
break;
}
}
if (!cnt) {
lev[u] = -;
}
return cnt;
}
ll Dinic()
{
ll ans = ;
while (BFS()) {
ans += DFS(S, INF);
}
return ans;
}
void init(int SS, int TT)
{
memset(Head, , sizeof(Head));
ed = ;
S = SS;
T = TT;
return;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n, m;
ll u, v, c;
cin >> n >> m;
init(, n + m + );
for (int i = ; i <= n; i++) {
cin >> c;
addedge(m + i, T, c);
}
ll summ = ;
for (int i = ; i <= m; i++) {
cin >> u >> v >> c;
summ += c;
addedge(S, i, c);
addedge(i, m + u, INF);
addedge(i, m + v, INF);
}
cout << summ - Dinic() << endl;
return ;
}
Codeforces 1082 毛毛虫图构造&最大权闭合子图的更多相关文章
- codeforces 1082G - Petya and Graph 最大权闭合子图 网络流
题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优 ...
- 【洛谷P3410】拍照题解(最大权闭合子图总结)
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...
- hdu 3879 hdu 3917 构造最大权闭合图 俩经典题
hdu3879 base station : 各一个无向图,点的权是负的,边的权是正的.自己建一个子图,使得获利最大. 一看,就感觉按最大密度子图的构想:选了边那么连接的俩端点必需选,于是就以边做点 ...
- CodeForces 1082 G Petya and Graph 最大权闭合子图。
题目传送门 题意:现在有一个图,选择一条边,会把边的2个顶点也选起来,最后会的到一个边的集合 和一个点的集合 , 求边的集合 - 点的集合最大是多少. 题解:裸的最大权闭合子图. 代码: #inclu ...
- bzoj 3232 圈地游戏 —— 01分数规划+最小割建图(最大权闭合子图)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3232 心烦意乱的时候调这道题真是...越调越气,就这样过了一晚上... 今天再认真看看,找出 ...
- 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)
https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...
- CF 103E Buying Sets 最大权闭合子图,匹配 难度:4
http://codeforces.com/problemset/problem/103/E 这道题首先一看就很像是最大权闭合子图,但是我们可以认为现在有两种点,数字和集合点,我们需要消除数字点的影响 ...
- 【POJ 2987】Firing (最小割-最大权闭合子图)
裁员 [问题描述] 在一个公司里,老板发现,手下的员工很多都不务正业,真正干事员工的没几个,于是老板决定大裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误.给出每个人的贡献值和 ...
- Petya and Graph(最小割,最大权闭合子图)
Petya and Graph http://codeforces.com/contest/1082/problem/G time limit per test 2 seconds memory li ...
随机推荐
- redhat 5中ifconfig不能使用问题
ifconfig不能使用问题 输入 ifconfig 命令的绝对路径, ifconfig在是/sbin这个目录下面, 所以在终端输入下列命令就可以运行此命令:/sbin/ifconfig 我们还可以修 ...
- 【VS开发】【计算机视觉】使用opencv静态库编译程序时爆出错误的解决方案
#[VS开发][计算机视觉]关于opencv静态库的使用说明 标签:[VS开发] [图像处理] --- 忽然间发现OpenCV中居然有已经编译好的静态链接库,于是尝试着使用一下,却遇到了比较多的问题, ...
- springboot使用elasticsearch的客户端操作eslaticsearch
一 ES客户端 ES提供多种不同的客户端: 1.TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端. 2.RestClient RestClient是官方推荐使用的 ...
- SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是fe ...
- PHP7 下安装 memcache 和 memcached 扩展
转载自:https://www.jianshu.com/p/c06051207f6e Memcached 是高性能的分布式内存缓存服务器,而PHP memcache 和 memcached 都是 Me ...
- Kefa and Dishes(CodeForces580D)【状态压缩DP】
状态压缩DP裸题,比赛的时候没反应过来,进行了n次枚举起点的solve,导致超时. #include<cstdio> #include<iostream> #include&l ...
- 文件操作:w,w+,r,r+,a,wb,rb
1.文件操作是什么? 操作文件: f = open("文件路径",mode="模式",encoding="编码") open() # 调用操 ...
- 小米soar
SOAR 简介 SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能优化与改写工具,由小米运维 DBA 团队出品 SOAR 体系架构 SOAR主要由语法解析器,集成 ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...
- asp.net 9 ViewState
VIEWSTATE aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&quo ...