Codeforces 981 共同点路径覆盖树构造 BFS/DP书架&最大值
A
/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + ;
const int gakki = + + + + 1e9;
const int N = 2e5 + ;
bool ok(string x)
{
int len = x.size();
if (len == )
{
return true;
}
for (int i = ; i < x.size() / ; i++)
{
if (x[i] != x[x.size() - - i])
{
return false;
}
}
return true;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
string a;
cin >> a;
int flag = ;
while (flag)
{
if (ok(a))
{
if (a.size() == )
{
cout << << endl;
return ;
}
a = a.substr(, a.size() - );
}
else
{
flag = ;
}
}
cout << a.size() << endl;
return ;
}
B
/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + ;
const int gakki = + + + + 1e9;
const int N = 2e5 + ;
map<int,ll> mp;
int main()
{
ios_base::sync_with_stdio();
cin.tie();
ll anser=;
int n,m;
cin >> n;
int a,b;
for(int i=;i<=n;i++)
{
cin >> a >> b;
if(mp[a]<b)
{
anser+=b-mp[a];
mp[a]=b;
}
}
cin >> m;
for(int i=;i<=m;i++)
{
cin >> a >> b;
if(mp[a]<b)
{
anser+=b-mp[a];
mp[a]=b;
}
}
cout<<anser<<endl;
return ;
}
C
解:
构造题
很明显如果是有不小于一个的度大于2的点则No
如果没有度大于2的点则是一条链 直接输出两端 如果有的话则是菊花图 找每个度为1的叶子点与中心相连
/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + ;
const int gakki = + + + + 1e9;
const int N = 1e5 + ;
vector<int> g[N];
int du[N];
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n;
cin >> n;
int u, v;
for (int i = ; i < n; i++)
{
cin >> u >> v;
g[u].pb(v), g[v].pb(u);
du[u]++, du[v]++;
}
int sum = ;
int maxn = -;
int aim = ;
for (int i = ; i <= n; i++)
{
if (du[i] > )
{
sum++;
}
if (du[i] > maxn)
{
aim = i;
maxn = du[i];
}
}
if (sum > )
{
cout << "No" << endl;
return ;
}
if (maxn > )
{
cout << "Yes" << endl;
int cnt=;
for(int i=;i<=n;i++)
{
if(du[i]==)
{
cnt++;
}
}
cout << cnt << endl;
for (int i = ; i <= n; i++)
{
if (i == aim)
{
continue;
}
if (du[i] == )
{
cout << aim << " " << i << endl;
}
}
}
else
{
cout << "Yes" << endl;
cout << << endl;
for (int i = ; i <= n; i++)
{
if (du[i] == )
{
cout << i << " ";
}
}
cout << endl;
}
return ;
}
D. Bookshelves
题意:
给你N个书K个书架,每个书有一个价值,要求你把书分成 连续的K段 分配进这K个书架使得这几个书架的总值 AND值 最大
解:
贪心 DP或者BFS
首先因为是AND操作所以我们要从最高位开始贪心 如果可行的话就 ans | =1 << i
DP:
/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + ;
const int gakki = + + + + 1e9;
const int N = + ;
int n, K;
ll sum[N][N];
ll a[N];
bool dp[N][N];
int main()
{
ios_base::sync_with_stdio();
cin.tie();
cin >> n >> K;
for (int i = ; i <= n; i++)
{
cin >> a[i];
sum[i][i] = a[i];
for (int j = i - ; j >= ; j--)
{
sum[j][i] = sum[j + ][i] + a[j];
}
}
//sum[i][j]表示从第i位到第j位的前缀和
ll ans = ;
for (int w = ; w >= ; w--) //从最高位开始贪起
{
mem(dp, ); //每一次要初始化
dp[][] = ; //dp[i][j]表示把前N个数分成j块每块都有 1<<w 是否可以
for (int i = ; i <= n; i++)
{
for (int j = i - ; j >= ; j--)
{
for (int k = ; k <= K; k++)
{
//如果从前的位置j满足可以分为k-1块而且从j+1到i的前缀和包含了之前贪心的答案同时1<<w位为1
if (dp[j][k - ] && (sum[j + ][i]&ans) == ans && ((sum[j + ][i] >> w) & ))
{
dp[i][k] = ;
}
}
}
}
if (dp[n][K])
{
ans |= 1LL << w;
}
}
cout << ans << endl;
return ;
}
BFS
E. Addition on Segments
Codeforces 981 共同点路径覆盖树构造 BFS/DP书架&最大值的更多相关文章
- bzoj 1907: 树的路径覆盖【贪心+树形dp】
我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...
- codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)
题目连接:http://codeforces.com/contest/1263/problem/F 题意:有n个设备,上和下分别连接着一颗树,上下两棵树每棵树的叶子节点连接一个设备,两棵树的根节点都是 ...
- HDU 3861 The King’s Problem 强连通分量 最小路径覆盖
先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...
- Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)
题意:给出一张完全图,所有的边的边权都是 y,现在给出图的一个生成树,将生成树上的边的边权改为 x,求一条距离最短的哈密顿路径. 先考虑x>=y的情况,那么应该尽量不走生成树上的边,如果生成树上 ...
- Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖
题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...
- SPOJ UOFTCG - Office Mates (树的最小路径覆盖)
UOFTCG - Office Mates no tags Dr. Baws has an interesting problem. His N graduate students, while f ...
- BZOJ-1907 树的路径覆盖 贪心
题意:给一个n个点的树,求树的最小路径覆盖.(这个最小路径覆盖不能有重点) 解法:往图论方向想很久,想得太复杂了,其实直接贪心.这个大佬题解写得很好: https://blog.csdn.net/bl ...
- SPOJ - UOFTCG 树的最小路径覆盖
//SPOJ - UOFTCG 树的最小路径覆盖 #include <bits/stdc++.h> #include <vector> using namespace std; ...
- [BZOJ] 1907: 树的路径覆盖
一个点必然被路径覆盖,根据是否为路径的端点分类 \(f[x][0]\)表示以\(x\)为根的子树,\(x\)不为端点的最小路径覆盖数 \(f[x][1]\)表示以\(x\)为根的子树,\(x\)为一条 ...
随机推荐
- OpenCV学习笔记(11)——Canny边缘检测
了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...
- fixture详细介绍-作为参数传入,error和failed区别
前言 fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手! fixture简介 fixture的目的是提供一个固定基线,在该基线上测 ...
- ls | ethtool
ls -lhS *.mp4|awk '{if($5>4000000) print $0}'ls -lhS *.mp4|awk '{if(($5>100000) && ($5 ...
- Python学习之==>数组(一)
1.定义数组 city = [] # 定义一个空数组 name = ['Jack','Panda','Bob','Franck'] # 根据下标找元素,最前面一个元素的下标是0,最后一个元素下标是-1 ...
- C#, 计算字符串里有多少个指定字符
int number = a.Count<char>(c => c == '@');
- oracle 在sql中显示blob的字符串
最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直接用 select * from table_name ...
- python 连接 hive数据库环境搭建
首先需要安装以下Python 包:(我用的是Python 2) 在安装Python包之前需要安装一些依赖工具: Debian/Ubuntu: apt-get install python-dev li ...
- 简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器
1 服务器代码 Linux eclipse C++ //======================================================================= ...
- AJAX中同步和异步的区别和使用场景
一.简介Ajax请求最重要的问题是代码执行的顺序.最长遇到的问题是,我们定义一个变量接收ajax异步请求的返回结果,后续代码使用,然而后续代码在使用时该变量为初始值,始终得不到想要的结果!!!二.示例 ...
- Postman接口测试动态传参——动态获取token值
上午刚学会jmeter动态传参,下午研究了下postman也知道怎么动态获取token了. 主要就是第1行和第2行代码,第3行加上是希望Test Results有个返回值,如果不加第3行运行成功后也看 ...