Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
E. Maximum Matching
题目链接:https://codeforces.com/contest/1038/problem/E
题意:
给出n个项链,每条项链左边和右边都有一种颜色(范围1~4),然后每条项链都有对应的价值。
现在你可以任意改变项链的位置,也可以交换左右两边的颜色,问怎么做才能得到最大的价值。一条项链得到价值,就要求其左边的颜色和左边的项链右边颜色相等,并且右边的颜色和右边项链左边的颜色相等。
题解:
分析就可以发现这个题就是找一条权值最大的欧拉路径(每条边刚好经过一次),我们这样构造,将两边的颜色看作点,然后价值看作边上的权值并且连接这两个点。
由于存在欧拉路径的充要条件就是度数为奇数的点不超过两个,这个题目中最多只有四个点,所以我们只需要枚举去掉一条边然后来跑欧拉路径就是了。
具体细节见代码吧:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n, sum;
int d[N], vis[N], del[N],check[N];
struct node {
int id, v, val;
};
vector <node> g[N], edges[N];
void Euler(int u, int fa) {
check[u]=;
for(auto v : g[u]) {
if(del[v.id] || vis[v.id])
continue ;
vis[v.id]=;
sum += v.val;
Euler(v.v, u);
}
}
bool Can() {
int cnt = ;
for(int i = ; i <= ; i++) {
if(check[i] && (d[i] & ))
cnt++;
}
return cnt <= ;
}
void init(){
memset(vis, , sizeof(vis));
memset(check,,sizeof(check));
sum = ;
}
int main() {
ios::sync_with_stdio(false);
cin.tie();
cin >> n;
for(int i = ; i <= n; i++) {
int c1, c2, v;
cin >> c1 >> v >> c2;
g[c1].push_back(node{i, c2, v});
g[c2].push_back(node{i, c1, v});
d[c1]++;
d[c2]++;
edges[i].push_back(node{c1, c2, v});
}
int ans = ;
for(int i = ; i <= ; i++) {
init();
Euler(i, -);
if(Can())
ans = max(ans, sum);
}
for(int i = ; i <= n; i++) {
del[i - ] = ;
del[i] = ;
d[edges[i][].id]--;
d[edges[i][].v]--;
for(int j = ; j <= ; j++) {
init();
Euler(j, -);
if(Can()){
ans = max(ans, sum);
}
}
d[edges[i][].id]++;
d[edges[i][].v]++;
}
cout << ans;
return ;
}
Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)的更多相关文章
- Codeforces Round #508 (Div. 2)
Codeforces Round #508 (Div. 2) http://codeforces.com/contest/1038 A #include<bits/stdc++.h> us ...
- [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
前几天给舍友讲这题的时候感觉挺有意思的,就贴上来吧... 题目链接:1038E - Maximum Matching 题目大意:有\(n\)个棒子,每个条两端有颜色\(c1,c2\)以及他的价值\(v ...
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- Codeforces Round #276 (Div. 1) B. Maximum Value 筛倍数
B. Maximum Value Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/484/prob ...
- Codeforces Round #508 (Div. 2) D. Slime
D. Slime 题目链接:https://codeforces.com/contest/1038/problem/D 题意: 给出两个数,然后每次可以对相邻的两个数合并,比如x,y,那么合并过后就是 ...
- Codeforces Round #172 (Div. 2) D. Maximum Xor Secondary 单调栈应用
http://codeforces.com/contest/281/problem/D 要求找出一个区间,使得区间内第一大的数和第二大的数异或值最大. 首先维护一个单调递减的栈,对于每个新元素a[i] ...
- Codeforces Round #276 (Div. 1)B. Maximum Value 筛法
D. Maximum Value You are given a sequence a consisting of n integers. Find the maximum possible ...
- Codeforces Round #445 Div. 1 C Maximum Element (dp + 组合数学)
题目链接: http://codeforces.com/contest/889/problem/C 题意: 给你 \(n\)和 \(k\). 让你找一种全排列长度为\(n\)的 \(p\),满足存在下 ...
- Codeforces Round #599 (Div. 2) A. Maximum Square 水题
A. Maximum Square Ujan decided to make a new wooden roof for the house. He has
随机推荐
- js设计模式:工厂模式、构造函数模式、原型模式、混合模式
一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.a ...
- 平衡的括号 (Parentheses Balance UVA - 673)
题目描述: 原题:https://vjudge.net/problem/UVA-673 题目思路: 1.水题 2.栈+模拟 3.坑在有空串 AC代码 #include <iostream> ...
- 【Linux 运维】linux系统查看版本信息
查看linux系统版本信息: [root@kvm-host~]# cat /proc/version (Linux查看当前操作系统版本信息)Linux version 3.10.0-514 ...
- docker容器学习笔记
docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...
- kaldi - Online Audio Server(服务器客户端建立方法-旧版在线解码)
目录 一.服务器客户端识别系统建立方法 1. Command line to start the server(服务器端启动方式): 2. Command line to start the clie ...
- LeetCode - 326, 342, 231 Power of Three, Four, and Two
1. 问题 231. Power of Two: 判断一个整数是否是2的n次方,其中n是非负整数 342. Power of Four: 判断一个整数是否是4的n次方,其中n是非负整数 326. Po ...
- UVa 10082 - WERTYU 解题报告 - C语言
1.题目大意: 输入一个错位的字符串(字母全为大写),输出原本想打出的句子. 2.思路: 如果将每个输入字符所对应的应输出字符一一使用if或者switch,则过于繁琐.因此考虑使用常量数组实现. 3. ...
- puppet学习笔记
puppet优势:容易理解.用户较多.门槛低.简单.安装配置文件较少 puppet使用Ruby语言开发,安装puppet需要安装Ruby puppet运行环境:Redhat.Centos.Window ...
- android项目中导入actionbarsherlock 需要注意的地方
1,在导入actionbarsherlock 这个library时,如果一直报" Invalid Project Description" ; 解决办法: android中li ...
- Java中的 toString 方法
1. Object 类中定义有 public String toString() 方法,其返回值是 String 类型,描述当前对象的有关信息: 2. 在进行 String 与其它类型数据的连接操作时 ...