前言:

这次DIV3还是蛮简单的

F.题目大意:

给你一个 2 × N 2 \times N 2×N大小的棋盘,有 m m m个点被禁止。问你是否能够放 1 × 2 和 2 × 1 1 \times 2 和 2 \times 1 1×2和2×1将棋盘填满.

题目思路:

考虑填满,条件很苛刻。不妨从前往后看:

最开始一定是竖着放。比横着放好。

直到遇到第一个障碍,找规律后不难发现它一定是要与后面的那个障碍成对组成一段满的.(从前往后两两配对.)

而两个障碍若在同一行则距离必须为偶数,反之必须为奇数.这样才能填满.

我们用 m a t c h [ i ] match[i] match[i]来标志 第 i i i 个方块是否配对.对方块排序后 O ( m ) O(m) O(m)扫一遍两两配对即可.

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
const int maxn = 2e5 + 5;
const int mod = 1e9 + 7;
pii a[maxn];
int match[maxn];
int main()
{ios::sync_with_stdio(false);int t; cin >> t;while (t--){int n , k; cin >> k >> n;for (int i = 1 ; i <= n ; i++){int x , y; cin >> x >> y;a[i].first = y;a[i].second = x;match[i] = 0;}if (n == 1){cout << "NO" << endl;continue;}sort(a + 1 , a + 1 + n);for (int i = 2 ; i <= n ; i++){if (a[i].first == a[i - 1].first)match[i] = match[i - 1] = 1;}for (int i = 2 ; i <= n ; i ++){if (match[i]) continue;if (match[i - 1]) continue;if (a[i].second != a[i - 1].second){if ((a[i].first - a[i - 1].first) % 2 == 0)match[i] = match[i - 1] = 1;}else {if ((a[i].first - a[i - 1].first) % 2)match[i] = match[i - 1] = 1;}}bool ok = true;for (int i = 1 ; i <= n ; i++)if (!match[i]) ok = false;if (ok) cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}

G.题目大意:

给你一个有向无权图。令 d i d_i di​为从 1 1 1节点到 i i i节点的最短路.对于图中每个点,求出以下条件限制下能够达到的具有最小 d j d_j dj​的值.

条件:在 i i i点上,可以任意次的往 d d d增大的方向走. 或者只能最多走一次,往 d d d非递增的方向走一步.

题目思路:

先BFS求出 d i s t dist dist数组。考虑其生成的以1为根的bfs外向生成树.

考虑一个点 i i i最终答案能比 d i d_i di​小的条件:

1.直接和它相连的返祖边使得到达 j j j,其 d j ≤ d i d_j \leq d_i dj​≤di​.(这时候只能停止或者往 d d d增大的方向走,所以 d j d_j dj​是最优的)

2.没有返祖边,但是它能够通过生成树到达 1这种点,那么可以更新这个点的答案.

(其实就是所有返祖边导致成环,那么环里的点都能被更新)

所以bfs后我们可以用一次dfs来更新答案.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
const int maxn = 2e5 + 5;
const int mod = 1e9 + 7;
vector<int> e[maxn];
int d[maxn][2];
void dfs (int u)
{for (auto v : e[u]){if (d[u][0] >= d[v][0])d[u][1] = min(d[u][1] , d[v][0]);else {dfs(v);d[u][1] = min (d[u][1] , d[v][1]);}}return ;
}
int main()
{ios::sync_with_stdio(false);int t; cin >> t;while (t--){int n , m; cin >> n >> m;for (int i = 1 ; i <= n ; i++){e[i].clear();d[i][0] = d[i][1] = 1e9;}for (int i = 1 ; i <= m ; i++){int x , y; cin >> x >> y;e[x].pb (y);}queue<int> q;q.push(1);d[1][0] = 0;while (q.size()){int g = q.front();q.pop();for (auto v : e[g])if (d[v][0] == 1e9)d[v][0] = d[g][0] + 1 , q.push(v);}dfs(1);for (int i = 1 ; i <= n ; i++)cout << min(d[i][0],d[i][1]) << " ";cout << endl;}return 0;
}

CF693Div3-F,G相关推荐

  1. 哈夫曼树哈夫曼编码(已知A,B,C,D,E,F,G的概率分别为:17,25,50,67,40,60,30.画出其哈夫曼树和每个字符对应的哈夫曼编码)

    [也可以哈夫曼树与最优不等长编码] 已知A,B,C,D,E,F,G的概率分别为:17,25,50,67,40,60,30.画出其哈夫曼树和每个字符对应的哈夫曼编码.

  2. 假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。 它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04}。【MOOC答案】

    目   录 1.题目 2.答案and详细题解过程 1)为这7个字母设计哈夫曼编码: 1.1.答案 1.2.详细题解过程 2)为这7个字母设计等长编码,至少需要几位二进制数?[3位] 2.1.答案 2. ...

  3. 假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。它们在电文中出现的频度分别为

    假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成.它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04}, 1)为这7个字母设计哈夫曼 ...

  4. 如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于

    如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K)

    ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K) 复杂的模拟题懒癌患者表示写不动 D. Made In Heaven (K短路) 略 int head[MAXN]; int cure ...

  6. printf打印浮点数,%e %f %g的区别

    打印浮点数有%e %f %g三种格式,它们的区别如下: %e 以科学计数法表示,小数点左边只有一位,小数点右边保留6位(过长则截去,不够则补零),接着是符号e,再接着就是10的多少次幂. %f 要求小 ...

  7. ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L)

    ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L) 发了博客一万年之后才发现H1写错了(tao A. Magic Mirror 题目链接 题面: Jessie has ...

  8. 卷积满足交换律:F*G(x)=G*F(x)

    求证:卷积满足交换律 F ∗ G ( x ) = G ∗ F ( x ) F*G(x)=G*F(x) F∗G(x)=G∗F(x) 证明:依据卷积的定义, F ∗ G ( x ) ≜ ∫ − ∞ + ∞ ...

  9. 思仪 4024A/B/C/D/E/F/G/H/L频谱分析仪

    4024频谱分析仪系列产品具有工作频段宽.性能指标高.扫描速度快.测试功能多.操作简便等多重优点,性能指标方面具有优良的平均噪声电平.相位噪声以及扫描速度,测量功能方面具有频谱分析.场强测量.干扰分析 ...

  10. 格式化输出,浮点数e,f,g保留位数的计算方式不同,e,f :%.3e/f:取小数点后三位,g:%.3g总共有效位数为3,不包括小数点

    格式化输出:format() format():把传统的%替换为{}来实现格式化输出 使用位置参数:就是在字符串中把需要输出的变量值用{}来代替,然后用format()来修改使之成为想要的字符串,位置 ...

最新文章

  1. 包邮免费送2022年科研人专属趣味台历,微科盟年终福利,错过悔一年!
  2. __add__,关于运算符重载(用户权限)
  3. P1311 选择客栈
  4. SPOJ 4110 Fast Maximum Flow (最大流模板)
  5. 在地图上 添加柱状_如何做出一份惊艳的PPT地图页?这2个字,你一定要知道!...
  6. 〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备
  7. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
  8. android launcher推荐,追求效率的你,需要这款 Android 最快启动器:FastKey Launcher
  9. 转-TabHost组件(二)(实现底部菜单导航)
  10. c语言鸢尾花智能分类,基于LogisticRegression的鸢尾花分类
  11. webpack-dev-server启动后, localhost:8080返回index.html的原理
  12. ISO27001LA国际信息安全管理主任审核员(IRCA)认证
  13. Python爬虫 抓取拉勾招聘信息
  14. 51单片机学习历程(一)单片机入门
  15. 暑期实践第二十九天 2022-8-1
  16. 用matlab画阻尼振动包络线,matlab阻尼振动模拟.doc
  17. HCNE之RIP协议总结
  18. Jenkins项目自动化部署工具的安装、配置及使用
  19. Ecstore的微信账号绑定会员免登录
  20. 【叮咚买菜】叮咚抢菜使用教程

热门文章

  1. Javascript验证表单身份证号码的合法性
  2. 嵌入式Linux中TP调试笔记
  3. USB ISO传输带宽计算
  4. Centos LNMP 一键安装教程
  5. mysql 汉明距离检索_汉明距离海量数据算法
  6. ${pageContext.request.contextPath }的使用
  7. Ansible自动化运维_超详细
  8. 倍福TwinCAT CNC轴如何做NC轴的主轴
  9. Altium Desinger怎么走差分蛇形线、单线蛇形线
  10. 对常见的三个免费数据库软件的一些个人看法