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书架&最大值的更多相关文章

  1. bzoj 1907: 树的路径覆盖【贪心+树形dp】

    我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...

  2. codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)

    题目连接:http://codeforces.com/contest/1263/problem/F 题意:有n个设备,上和下分别连接着一颗树,上下两棵树每棵树的叶子节点连接一个设备,两棵树的根节点都是 ...

  3. HDU 3861 The King’s Problem 强连通分量 最小路径覆盖

    先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...

  4. Codeforces 618D Hamiltonian Spanning Tree(树的最小路径覆盖)

    题意:给出一张完全图,所有的边的边权都是 y,现在给出图的一个生成树,将生成树上的边的边权改为 x,求一条距离最短的哈密顿路径. 先考虑x>=y的情况,那么应该尽量不走生成树上的边,如果生成树上 ...

  5. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  6. SPOJ UOFTCG - Office Mates (树的最小路径覆盖)

    UOFTCG - Office Mates no tags  Dr. Baws has an interesting problem. His N graduate students, while f ...

  7. BZOJ-1907 树的路径覆盖 贪心

    题意:给一个n个点的树,求树的最小路径覆盖.(这个最小路径覆盖不能有重点) 解法:往图论方向想很久,想得太复杂了,其实直接贪心.这个大佬题解写得很好: https://blog.csdn.net/bl ...

  8. SPOJ - UOFTCG 树的最小路径覆盖

    //SPOJ - UOFTCG 树的最小路径覆盖 #include <bits/stdc++.h> #include <vector> using namespace std; ...

  9. [BZOJ] 1907: 树的路径覆盖

    一个点必然被路径覆盖,根据是否为路径的端点分类 \(f[x][0]\)表示以\(x\)为根的子树,\(x\)不为端点的最小路径覆盖数 \(f[x][1]\)表示以\(x\)为根的子树,\(x\)为一条 ...

随机推荐

  1. 【转】C/C++ 引用作为函数的返回值

    转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ...

  2. 阶段3 2.Spring_08.面向切面编程 AOP_4 spring基于XML的AOP-配置步骤

    resources下新建bean.xml文件 xmlns:aop 先配置IOC aop 通知类就是logger.id配置为logAdvice表示日志的通知 梳理流程 首先我们在这有个Service它需 ...

  3. Elasticsearch 为何要在 7.X版本中 去除type 的概念

    背景说明 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...

  4. QDataSet – 如何比较两个数据集内容的差异

    QDataSet 提供了两个函数来比较两个数据集的差异,并将结果保存到第三个数据集. procedure Intersect(ASource1, ASource2: TQDataSet; AField ...

  5. gitlab中的CI

    https://blog.csdn.net/chengzi_comm/article/details/78778284

  6. 对于富文本编辑器中使用lazyload图片懒加载

    使用lazyload.js图片懒加载的作用是给用户一个好的浏览体验,同时对服务器减轻了压力,当用户浏览到该图片的时候再对图片进行加载,项目中使用lazyload的时候需要将图片加入data-orgin ...

  7. 用番茄工作法提升工作效率 (四)ToDoList的持续优化

    一.写在前面 前面三篇文章,系统介绍了我如何使用番茄工作法,并结合“自制”的桌面ToDoList工具来实现自己的任务管理. 自制ToDoList的初衷是自我管理,但是好友看到我的桌面(程序)后,建议我 ...

  8. 【Qt开发】qt中涉及到空格包含路径的解决办法

    qt中涉及到空格路径,qmake是无法正确编译的. 需要在空格路径前面加上$$quote INCLUDEPATH += $$quote(C:/Program Files/MySQL/MySQL Ser ...

  9. 模板中for 的使用

    from flask import Flask,render_template app = Flask(__name__) app.config.update( DEBUG = True, ) @ap ...

  10. mv 命令 移动或重命名文件

    mv 命令 移动或重命名文件 [root@localhost soft]# .txt [root@localhost soft]# [root@localhost soft]# ls .txt [ro ...