10.10 review

Problem 1. Tree
Input file: tree.in
Output file: tree.out
Time limit: 1 second
给出 N 个点的树和 K,问能否把树划分成 N /K 个连通块,且每个连通块的点数都是 K。
Input
第 1 行,1 个整数 T ,表示数据组数。接下来 T 组数据,对于每组数据:
第 1 行,2 个整数 N, K。
接下来 (N − 1) 行,每行 2 个整数 Ai , Bi ,表示边 (Ai , Bi )。点用 1, 2, . . . , N 编号。
Output
对于每组数据,输出 YES或 NO。

题解:这个题很水,只是当时没想到而已!~~~

实际上我们把整棵树划分出来仅需要暴搜就好了~~~2333

我们从叶子节点向上回溯,叶子节点是1,其父亲的值就是各子节点的和,以此类推,回溯上去,一旦超过k显然就是无解了~等于k的话我们就归零重新计数。

代码:by nevermore

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 #define MAXN 100100
 6 struct Link
 7 {
 8     int to, next;
 9 }l[MAXN * 2];
10 int first[MAXN];
11 int add = 0;
12 void add_edge(int u, int v)
13 {
14     l[add].to = v;
15     l[add].next = first[u];
16     first[u] = add ++;
17 }
18 int T, n, k;
19 int num[MAXN];
20 int temp = 0;
21 bool use[MAXN];
22 bool dfs(int x)
23 {
24     use[x] = 1;
25     for (int i = first[x]; ~ i; i = l[i].next)
26     {
27         if (!use[l[i].to])
28         {
29             if (dfs(l[i].to))
30                 num[x] += num[l[i].to];
31             else return false;
32         }
33     }
34     if (num[x] == k) num[x] -= k;
35     else if (num[x] > k) return false;
36     return true;
37 }
38 int main()
39 {
40     freopen("tree.in", "r", stdin); freopen("tree.out", "w", stdout);
41     scanf("%d", &T);
42     while (T --)
43     {
44         memset(use, 0, sizeof(use));
45         add = 0;
46         scanf("%d%d", &n, &k);
47         int u, v;
48         memset(first, -1, sizeof(first));
49                 for (int i = 1; i < n; i ++)
50         {
51             scanf("%d%d", &u, &v);
52             add_edge(u, v);
53             add_edge(v, u);
54         }
55         for (int i = 1; i <= n; i ++) num[i] = 1;
56         if (dfs(1) && n % k == 0) printf("YES\n");
57         else printf("NO\n");
58         for (int i = 0; i < add; i ++)
59             l[i].to = l[i].next = 0;
60     }
61     return 0;
62 } 

Problem 2. Graph

给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。
Input
第 1 行,2 个整数 N, M 。
接下来 M 行,每行 2 个整数 Ui, Vi ,表示边 ?Ui, Vi?。点用 1, 2, . . . , N 编号。
Output
N 个整数 A(1), A(2), . . . , A(N )。

Note

• 对于 60% 的数据,1 ≤ N, K ≤ 10^3;

• 对于 100% 的数据,1 ≤ N, M ≤ 10^5。

正解:反向建图,从编号大的点往回跑bfs,更新每个点所能连到的最大编号。

代码:还是nevermore的,谁让他写好了呢?2333我不是代码的生成者,我只做代码的搬运工

  1 #include <queue>
  2
  3 #include <cstdio>
  4
  5 #include <cstring>
  6
  7 #include <algorithm>
  8
  9 using namespace std;
 10
 11
 12
 13
 14 #define MAXN 100100
 15
 16
 17
 18
 19 struct Link
 20
 21 {
 22
 23     int to, next;
 24
 25 }l[MAXN];
 26
 27 int first[MAXN];
 28
 29
 30
 31
 32 int add = 0;
 33
 34 void add_edge(int u, int v)
 35
 36 {
 37
 38     l[add].to = v;
 39
 40     l[add].next = first[u];
 41
 42     first[u] = add ++;
 43
 44 }
 45
 46
 47
 48
 49 int n, m;
 50
 51 int ans[MAXN];
 52
 53
 54
 55
 56 queue <int> q;
 57
 58 bool use[MAXN];
 59
 60
 61
 62
 63 void bfs(int s)
 64
 65 {
 66
 67     q.push(s);
 68
 69     use[s] = 1;
 70
 71     while (!q.empty())
 72
 73     {
 74
 75         int x = q.front();
 76
 77         q.pop();
 78
 79         for (int i = first[x]; ~ i; i = l[i].next)
 80
 81             if (!use[l[i].to])
 82
 83             {
 84
 85                 ans[l[i].to] = max(ans[l[i].to], ans[x]);
 86
 87                 use[l[i].to] = 1;
 88
 89                 q.push(l[i].to);
 90
 91             }
 92
 93     }
 94
 95 }
 96
 97
 98
 99
100 int main()
101
102 {
103
104     freopen("graph.in", "r", stdin);
105
106     freopen("graph.out", "w", stdout);
107
108     scanf("%d%d", &n, &m);
109
110     int u, v;
111
112     memset(first, -1, sizeof(first));
113
114     for (int i = 1; i <= m; i ++)
115
116     {
117
118         scanf("%d%d", &u, &v);
119
120         add_edge(v, u);
121
122     }
123
124     for (int i = 1; i <= n; i ++) ans[i] = i;
125
126     for (int i = n; i >= 1; i --)
127
128         if (ans[i] == i)
129
130             bfs(i);
131
132     for (int i = 1; i <= n; i ++)
133
134         printf("%d ", ans[i]);
135
136     return 0;
137 }  

in fact 我自己的思路和这个一点都不一样,我自己的思想是借鉴的最短路算法,我们每次只需要计原来的总边权为路径上最大的编号,三角不等式更新的时候只需要取max记好了。

唉(此处是二声)~这些好像我都写过。。。。。2333具体代码参见之前的随笔“最大路”,改改,那里是最大的边的权值,改成标号就好了~~更简单了不是么?

第三题必有蹊跷。。。。

时间: 2024-10-12 17:16:09

10.10 review的相关文章

A review for Mini VCI Cable with 10.10.018 Techstream

I've got the Mini VCI cable for TOYOTA TIS Techstream V10.10.018 for half a month, and  now, I would like to do a quick review for wobd2. Here, first of all,I have to mention that I have no affiliation with the supplier of this product, and I would n

10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包

- 10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包 - 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html  - tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html  # 10.6 监控io性能 ![mark](http://oqxf7c508.bkt.clouddn.com/b

VMware Workstation11.0安装Mac OS X 10.10最完整指南(包含所需所有资源下载)

前言说明:最近换了新的电脑,配置好很多了,想装下虚拟机来玩下IOS,其中也遇到了几个大坑,现在刚完全装好,把所有步骤以及资源整合到一处,后面的朋友可以避免浪费很多无谓的百度时间. ""我先把使用到的程序以及版本说明下,因为这非常总要,使用虚拟机安装mac,其实就是装黑苹果,这要依赖很多破解工具,但这些工具都是有版本支持的.我这些版本装的没问题,但是你如果下载网上其他版本,我就不能确保一定没问题了,只能是自己试了."" VMware 11.0 永久不过期激活密钥 1F

Android基础入门教程——10.10 传感器专题(1)——相关介绍

Android基础入门教程--10.10 传感器专题(1)--相关介绍 标签(空格分隔): Android基础入门教程 1.传感器相关介绍: 说到传感器,相信大家都不会陌生吧,比如微信的摇一摇就用到了加速度传感器: 传感器的定义:一种物理设备或者生物器官,能够探测.感受外界的信号,物理条件(如光,热, 适度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官! 传感器的种类:可以从不同的角度对传感器进行划分,转换原理(传感器工作的基本物理或化学 效应):用途:输出信号以及制作材料和工艺

用beamoff给VMware的Mac OS X 10.10.x加速

前言 今天刚在VMware里装了个Yosemite,然后测试了下看电影,真j8卡,试了下在vm里打开3d加速,然并卵,直接显示不能打开3d加速,然后找了下发现有个vga的什么软件,是vmware里的显卡驱动,不过看了下发现vga这个软件不支持yosemite,正好找到下面的大神的文章. 我全部转帖过来再完善下. 原文 http://www.cnblogs.com/yipu/p/4422355.html MAC OS X 10.10.x Yosemite在VMWare中实在是太慢了,卡出翔!好在高

mac 10.10.4 下安装xdebug不了的解决办法

mac 是10.10.4版本,安装了xampp的XAMPP for OS X 5.6.8,按照常规方法找到php版本,然后使用homebrew直接安装,再修改php.ini再重启apache怎么也不能成功(不能从phpinfo页面看到xdebug信息),最后从https://community.apachefriends.org/f/viewtopic.php?t=70686&p=242247 找到答案,说这个版本的xampp已经自带了xdebug,在/Applications/XAMPP/xa

Mac OS 10.10 php不能连接mysql问题解决

php连接数据库都没问题,升级到10.10这后, 突然连接不上了. 这个问题放了很久, 今天突然搜索到一篇文章. 用链接的方式解决了. 原文如下: So you installed Ubuntu, got all excited about developing your Rails application on it, and then- No such file or directory - /tmp/mysql.sock) No matter what you do, database c

Mac OS X 10.10 Yosemite下配置 apache+php

自从系统从OS X Mavericks 10.9升级到OS X Yosemite 10.10 后之前配置apache和php均不能正常使用了, 重新设置配置如下: 首先,查看当前系统的apache版本,终端下输入:httpd -v Apache/2.4.0 1. 启动Apache 服务      sudo apachectl start      打开safari,访问:http://localhost,显示“It works!”表示Apache启动正常 当前访问的是Apache的默认目录,/L

MAC OS X 10.10 应用程序下载失败后lunchpad产生灰色图标的解决办法

方法如下:打开应用程序- 实用工具 - 终端. 以此出入如下字符 defaults write com.apple.dock ResetLaunchPad -bool true killall Dock 再次打开 LaunchPad 的时候, 所有图标会被重建, 并且之前的所有设置都会丢失. 没有特殊情况不要使用哦. 以免丢失之前的排列方式与文件夹. MAC OS X 10.10 应用程序下载失败后lunchpad产生灰色图标的解决办法,布布扣,bubuko.com

OSX: 解决10.10 Yosemite Developer Preview 2安装后的Recovery HD看不见的问题

OS X 10.10 Yosemite Developer Preview 2,下面简称10.10DP2,安装之后,有可能出现10.10的恢复盘(Recovery HD)看不见的问题.这是因为它的一个设置错误,下面我们用比较直观的方法来解决它. 这是修复后的启动选项,其中显示的Recovery-10.10 清楚点的 首先,开启磁盘工具的Debug菜单. 无论是从哪个磁盘启动,都可以操作,运行下面命令: defaults write com.apple.DiskUtility DUDebugMen