A

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
const int MAXQ = ;
/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}*/
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 num[];
int anser[];
map<string, int> mp;
int main()
{
mp["S"] = , mp["M"] = , mp["L"] = ;
mp["XL"] = , mp["XXL"] = , mp["XXXL"] = ;
mp["XS"] = , mp["XXS"] = , mp["XXXS"] = ;
int n;
int ans = ;
read(n);
string now;
for (int i = ; i <= n; i++)
{
cin >> now;
num[mp[now]]++;
}
for (int i = ; i <= n; i++)
{
cin >> now;
anser[mp[now]]++;
}
for (int i = ; i <= ; i++)
{
ans += abs(num[i] - anser[i]);
}
cout << ans / << endl;
return ;
}

B

分奇偶即可

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
const int MAXQ = ;
/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}*/
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 num[];
int anser = ;
int number[];
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int n, m;
cin >> n >> m;
for (int i = ; i <= n; i++)
{
cin >> num[i];
}
n++;
num[n] = m;
for (int i = ; i <= n; i++)
{
number[i] = number[i - ];
if (i & )
{
int add = num[i] - num[i - ];
number[i] += add;
}
}
anser = number[n];
for (int i = ; i <= n - ; i++)
{
if (num[i] - > num[i - ] || num[i] + < num[i + ])
{
if (i & )
{
int now = number[i] + m - num[i] + number[i] - number[n] - ;
anser = max(anser, now);
}
}
}
cout << anser << endl;
return ;
}

C

离散化前缀和

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
const int MAXQ = ;
/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}*/
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;
}
ll number[];
ll ans[];
ll l[], r[];
ll anser[];
map<ll, ll> mp;
map<ll, ll> mpb;
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int n;
cin >> n;
for (int i = ; i <= n; i++)
{
cin >> l[i] >> r[i];
number[ * i - ] = l[i];
number[ * i - ] = r[i];
number[ * i] = r[i] + ;
}
sort(number + , number + * n + );
int pop = unique(number + , number + * n + ) - number - ;
// for (int i = 1; i <= pop; i++)
// {
// cout << number[i] << " ";
// }
// cout << endl;
for (int i = ; i <= pop; i++)
{
mp[number[i]] = i;
mpb[i] = number[i];
}
for (int i = ; i <= n; i++)
{
ans[mp[l[i]]]++;
ans[mp[r[i]] + ]--;
}
for (int i = ; i <= pop; i++)
{
ans[i] += ans[i - ];
}
ll cur = ans[];
for (int i = ; i <= pop - ; i++)
{
cur = ans[i];
anser[cur] += mpb[i + ] - mpb[i];
}
cur = ans[pop];
anser[cur]++;
for (int i = ; i <= n; i++)
{
cout << anser[i] << " ";
}
cout << endl;
return ;
}

D

倒着DP

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
const int MAXQ = ;
/*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}*/
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;
}
ll zuhe[][];
int n;
ll num[];
ll ans[];
ll anser = ;
void init()
{
zuhe[][] = ;
for (int i = ; i <= n; i++)
{
zuhe[i][] = ;
for (int j = ; j <= i; j++)
{
zuhe[i][j] = (zuhe[i - ][j] + zuhe[i - ][j - ]) % mod;
}
}
}
int main()
{
ios_base::sync_with_stdio();
cin.tie(); cin >> n;
ans[n + ] = ;
init();
for (int i = ; i <= n; i++)
{
cin >> num[i];
}
for (int i = n; i >= ; i--)
{
if (num[i] <= )
{
continue;
}
for (int j = i + num[i] + ; j <= n + ; j++)
{
ans[i] += zuhe[j - i - ][num[i]] * ans[j];
ans[i] %= mod;
}
}
for (int i = ; i <= n; i++)
{
anser += 1LL * ans[i];
anser %= mod;
}
cout << anser << endl;
return ;
}

E

边双联通分量缩点后是一颗树 再求树的直径即可

/*Huyyt*/
#include <bits/stdc++.h>
#include <vector>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N = + ;
const int M = + ;
struct EDGE
{
int v, next;
} edge[M * ];
int first[N], low[N], dfn[N], belong[N], degree[N], sta[M], instack[M];
vector<int> gra[];
int g, cnt, top, scc;
int min(int a, int b)
{
return a < b ? a : b;
}
void AddEdge(int u, int v)
{
edge[g].v = v;
edge[g].next = first[u];
first[u] = g++;
}
void Tarjan(int u, int fa)
{
int i, v;
low[u] = dfn[u] = ++cnt;
sta[++top] = u;
instack[u] = ;
for (i = first[u]; i != -; i = edge[i].next)
{
v = edge[i].v;
if (i == (fa ^ ))
{
continue;
}
if (!dfn[v])
{
Tarjan(v, i);
low[u] = min(low[u], low[v]);
}
else if (instack[v])
{
low[u] = min(low[u], dfn[v]);
}
}
if (dfn[u] == low[u])
{
scc++;
while ()
{
v = sta[top--];
instack[v] = ;
belong[v] = scc;
if (v == u)
{
break;
}
}
}
}
map<pair<int, int>, int> mp;
int ssssstart, eeeeeeend;
int distence[];
int visit[];
void getdis(int x)
{
visit[x] = ;
int len = gra[x].size();
for (int i = ; i < len; i++)
{
int to = gra[x][i];
if (visit[to])
{
continue;
}
distence[to] = distence[x] + ;
getdis(to);
}
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
memset(first, -, sizeof(first));
int n, m;
int u, v;
cin >> n >> m;
for (int i = ; i <= m; i++)
{
cin >> u >> v;
AddEdge(u, v);
AddEdge(v, u);
}
for (int i = ; i <= n; i++)
{
if (!dfn[i])
{
Tarjan(i, -);
}
}
for (int i = ; i <= n; i++)
{
for (int j = first[i]; j != -; j = edge[j].next)
{
v = edge[j].v;
if (belong[i] != belong[v])
{
if (!mp[make_pair(belong[i], belong[v])])
{
gra[belong[i]].push_back(belong[v]);
gra[belong[v]].push_back(belong[i]);
mp[make_pair(belong[i], belong[v])] = mp[make_pair(belong[v], belong[i])] = ;
}
}
}
}
getdis();
int maxnn = -;
for (int i = ; i <= scc; i++)
{
if (distence[i] > maxnn)
{
ssssstart = i;
maxnn = distence[i];
}
}
mem(visit, ), mem(distence, );
getdis(ssssstart);
maxnn = -;
for (int i = ; i <= scc; i++)
{
if (distence[i] > maxnn)
{
eeeeeeend = i;
maxnn = distence[i];
}
}
cout << distence[eeeeeeend] << endl;
return ;
}

Codeforces 1000 组合数可行线段倒dp 边双联通缩点求树直径的更多相关文章

  1. hdu 4612 双联通缩点+树形dp

    #pragma comment(linker,"/STACK:102400000,102400000")//总是爆栈加上这个就么么哒了 #include<stdio.h> ...

  2. hdu 2242双联通分量+树形dp

    /*先求出双联通缩点,然后进行树形dp*/ #include<stdio.h> #include<string.h> #include<math.h> #defin ...

  3. Codeforces.264E.Roadside Trees(线段树 DP LIS)

    题目链接 \(Description\) \(Solution\) 还是看代码好理解吧. 为了方便,我们将x坐标左右反转,再将所有高度取反,这样依然是维护从左到右的LIS,但是每次是在右边删除元素. ...

  4. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  5. [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

    [Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...

  6. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  7. Codeforces 682 D. Alyona and Strings (dp)

    题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...

  8. CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)

    传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...

  9. 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)

    线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...

随机推荐

  1. Kibana 创建索引 POST 403 (forbidden) on create index

    一.问题描述: Kibana创建索引:kibana > management > index patterns > create index pattern 索引名称: mercha ...

  2. windows客户端如果通过cmd窗口连接到远程linux服务器,可以使用telnet;

     linux系统打开telnet端口的方法 2016-03-11 16:02:25 标签:linux telnet 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. ...

  3. 如何为根分区扩容(centos7为例)

    linux系统所有的文件都是存放在根分区中的,如果根分区容量即将耗尽,我们就需要给根分区扩容,我们可以使用lsblk命令来查看,系统的根分区实际是逻辑卷,所以想要扩展根分区只要将逻辑卷扩容就可以了.此 ...

  4. 【Qt开发】【计算机视觉】OpenCV在Qt-MinGw下的编译库

    最近电脑重装系统了,第一件事重装OpenCV.这次直接装最新版,2014-4-25日发布的OpenCV2.4.9版本,下载链接: http://sourceforge.NET/projects/ope ...

  5. 再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦

    精炼并增补于:界面之下:还原真实的MV*模式 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些应用逻辑,应用逻辑(application ...

  6. C# async await的使用

    async 声明一个包含异步代码的函数,该函数执行时不会阻塞调用线程. async标记的函数返回值必须为 void ,Task,Task<TResult> await 必须修饰Task 或 ...

  7. nginx文件路径配置(root|alias)

    nginx指定文件路径主要有两种方式:root|alias. 那么他们究竟有什么区别呢? 指令的使用方法和作用域: [root] 语法:root path 默认值:root html 配置段:http ...

  8. 【Python】【基础知识】【内置函数】【help的使用方法】

    原英文帮助文档: help([object]) Invoke the built-in help system. (This function is intended for interactive ...

  9. 小记---------spark架构原理&主要组件和进程

    spark的主要组件和进程       driver (进程):     我们编写的spark程序就在driver上,由driver进程执行       master(进程):     主要负责资源的 ...

  10. 2-SAT问题介绍求解 + 模板题P4782

    (点击此处查看原题) 什么是2-SAT问题 sat 即 Satisfiability,意思为可满足,那么2-SAT表示一些布尔变量只能取true或者false,而某两个变量之间的值存在一定的关系(如: ...