vector

    向量 相当于一个数组
    在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。
   优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组
               进行动态操作。通常体现在push_back() pop_back()
               (2) 随机访问方便,即支持[ ]操作符和vector.at()
               (3) 节省空间。
   缺点:(1) 在内部进行插入删除操作效率低。
               (2) 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。
               (3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释
                     放 
 

vector<int> s;  
定义一个空的vector对象,存储的是int类型的元素。

vector<int> s(n);
定义一个含有n个int元素的vector对象。
vector<int> s(first, last);  
定义一个vector对象,并从由迭代器first和last定义的序列[first, last)中复制初值。

vector的基本操作有:

s[i]
直接以下标方式访问容器中的元素。

s.front()
返回首元素。
s.back()
返回尾元素。

s.push_back(x)
向表尾插入元素x。
s.size()
返回表长。

s.empty()
当表空时,返回真,否则返回假。
s.pop_back()
删除表尾元素。

s.begin()
返回指向首元素的随机存取迭代器。
s.end()
返回指向尾元素的下一个位置的随机存取迭代器。

s.insert(it, x)
向迭代器it指向的元素前插入新元素val。
s.insert(it, n, x)
向迭代器it指向的元素前插入n个x。

s.insert(it, first, last)
将由迭代器first和last所指定的序列[first, last)插入到迭代器it指向的元素前面。
s.erase(it)
删除由迭代器it所指向的元素。

s.erase(first, last)
删除由迭代器first和last所指定的序列[first, last)。
s.reserve(n)
预分配缓冲空间,使存储空间至少可容纳n个元素。

s.resize(n)
改变序列的长度,超出的元素将会被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间。
s.resize(n, val)
改变序列的长度,超出的元素将会被删除,如果序列需要扩展(原空间小于n),将用val填满扩展出的空间。

s.clear()
删除容器中的所有的元素。
s.swap(v)
将s与另一个vector对象v进行交换。

s.assign(first, last)
将序列替换成由迭代器first和last所指定的序列[first, last)。[first, last)不能是原序列中的一部分。
要注意的是,resize操作和clear操作都是对表的有效元素进行的操作,但并不一定会改变缓冲空间的大小。

另外,vector还有其他一些操作如反转、取反等,不再一下列举。

vector上还定义了序列之间的比较操作运算符(>, <, >=, <=, ==, !=),可以按照字典序比较两个序列。

 
 
 
 
这道题只需要双向DFS求个树的直径就可以了~
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <climits>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std; const int INF = 0x3f3f3f3f; struct edge{
int ev,w;
edge(int a,int b):ev(a),w(b){ }
};
vector <edge> elist[];
bool vis[];
int s, ans; void DFS(int fv,int dis){
if (dis > ans){
ans = dis;
s = fv;
}
vis[fv] = true;
int size = elist[fv].size(); int ev,w;
for (int i = ; i < size; ++i){
ev = elist[fv][i].ev;
w = elist[fv][i].w;
if (vis[ev]) continue;
DFS(ev,dis + w);
}
} int main(){
int N,M;
int fv,ev,w;
char dir[];
while(EOF != scanf("%d%d",&N,&M)){
for (int i = ; i <= N; ++i)
elist[i].clear();
for (int i = ; i <= M; ++i){
scanf("%d%d%d%s",&fv,&ev,&w,dir);
elist[fv].push_back(edge(ev,w));
elist[ev].push_back(edge(fv,w));
} memset(vis,,sizeof(vis));
s = ans = ;
DFS(,); memset(vis,,sizeof(vis));
ans = ;
DFS(s,); printf("%d\n",ans);
}
return ;
}

POJ1985 DFS【STL__vector_的应用】的更多相关文章

  1. 【poj1985】 Cow Marathon

    http://poj.org/problem?id=1985 (题目链接) 题意 求树上两点间最长距离.题目背景以及输入描述请见poj1984. Solution 树的直径. 代码 // poj198 ...

  2. poj1985和poj1849(树的直径)

    题目传送门:poj1985 树是连通无环图,树上任意两点之间的路径是唯一的.定义树上任 意两点u, v的距离为u到v路径上边权的和.树的直径MN为树上最长路 径,即点M和N是树上距离最远的两个点. 题 ...

  3. poj1985 / poj2631(树的直径)

    poj1985 Cow Marathon 树的直径裸题 树的直径的一般求法: 任意一点为起点,dfs/bfs找出与它最远的点$u$ 以$u$为起点,dfs/bfs找出与它最远的点$v$ 则$d(u,v ...

  4. WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS

    title: WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS date: 2020-03-20 10:43:00 categories: acm tags: [ ...

  5. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  6. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  7. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  8. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  9. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

随机推荐

  1. A Byte of Python 笔记(5)函数:定义、形参、局部变量、默认参数、关键参数

    第7章  函数 函数是重要的程序段.它们允许你给一块语句一个名称,然后你可以在程序的任何地方使用这个名称任意多次地运行这个语句块.这被称为 调用 函数. 定义函数 函数通过 def 关键字定义.def ...

  2. 上架app被拒原因总结

    1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...

  3. LintCode-子数组之和

    题目描述: 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. publ ...

  4. JavaEE Tutorials (8) - Java持久化API介绍

    8.1实体96 8.1.1实体类的需求97 8.1.2实体类中的持久化字段和属性97 8.1.3实体的主键101 8.1.4实体关系中的多重性103 8.1.5实体关系中的方向103 8.1.6实体中 ...

  5. squee_spoon and his Cube VI(贪心,找不含一组字符串的最大长度+kmp)

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 77  Solved: 22Subm ...

  6. Android实现视频录制

    安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...

  7. Sql语句之select 5种查询

    select 5种子句:注意顺序where / group by /having / order by / limit / 清空表中的数据:truncate 表名: 导入表结构(不含数据): crea ...

  8. Razor强类型视图下的文件上传

    域模型Users.cs using System;using System.Collections.Generic;using System.Linq;using System.Web; namesp ...

  9. Android中的一些基础知识(三)

    最近在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 在TextView中显示图像(使用< img>标签) 在TextView中显示图片的方法有许 ...

  10. apache基本配置

    apache基本配置               apache本地虚拟域名配置