hdu~4707(vector)
来源:互联网 发布:mysql update 自关联 编辑:程序博客网 时间:2024/05/21 10:03
题目连接
题意:
给你一没有回路的连通图,标记为0~n-1,相邻边的权值为1,找出距离 点0 大于m的点的个数.
输入n m , n-1条边.(理解了题意+vector 这道题就很水了)
据说这道题的题目很水,直接用num[y]=num[x]+1(输入一条边 X Y)都能过,我也是醉了.
然而这些都是歪门邪道,让我们来看看正确的解法:
首先N<10^5,MAX=10^5.
如果用floyd最短路做的话是开不了那么大的数组num[MAX][MAX]的.
这个时候只需要开一个vector<int > num[MAX],因为vector里面的空间是可变化的,
输入n条边后,num最大只用了2*MAX个空间.(之前num[MAX][MAX]开了MAX*MAX个空间).
所以就能做了,具体请看代码,直接遍历:
#include <stdio.h>#include <vector>using namespace std;const int MAX = 100000;int main(){ int T,n,m,x,y; scanf("%d",&T); while(T--){ //num[x] :记录了与x相连的边有哪些 vector<int > num[MAX]; //这类似一个二维数组 num[MAX][变化的] scanf("%d %d",&n,&m); for(int i=1;i<n;++i){ scanf("%d %d",&x,&y); num[x].push_back(y); } int sign[MAX] = {0}; for(int i=0;i<n;++i) //与i相邻的点的距离就是sign[i]+1 for(int j=0;j<num[i].size();++j) sign[num[i][j]]=sign[i]+1; int ans=0; for(int i=0;i<n;++i) //记录距离大于m的点的个数 if(sign[i]>m) ans++; printf("%d\n",ans); } return 0;}/*110 20 10 20 31 41 52 63 74 86 9Sample Output2*/
0 0
- hdu~4707(vector)
- HDU 3062 vector
- hdu 4288 Coder (vector)
- HDU 5101 Select(vector)
- HDU 1257 vector。。。
- hdu 2871 vector + 线段树 Memory Control
- hdu 2586 How far away ?<vector>
- vector 可变长数组 hdu 3823
- hdu 1004 vector(见识了,呵呵)
- hdu 2871 Memory Control (线段树&vector)
- hdu 4858 项目管理(vector模拟)
- HDU-#4858 项目管理(模拟+vector)
- hdu 5071 vector操作恶心模拟
- hdu 1216 (vector || 打表)
- HDU 4288 Coder(vector + upper_bound, lower_bound)
- hdu 1199 Color the Ball vector使用
- HDU 找出直系亲属 (dfs+vector)
- HDU 4175 vector.resize() 坑点
- Struts2整合Spring
- 看起来好厉害的一些英文名词
- cocos植物大战僵尸(一)load场景:异步加载资源
- 51nod 1270 数组的最大代价(DP)
- XML解析之dom4j解析
- hdu~4707(vector)
- 网易游戏2016实习生招聘笔试题目--井字棋
- 栈的应用—数制转换
- Docker认识基础
- Android的javascript扩展
- Kinect v2.0原理介绍之六:Kinect深度图与彩色图的坐标校准
- java script
- Hadoop 实例1---通过采集的气象数据分析每年的最高温度
- TCP的流量控制