UVA 12437 Kisu Pari Na 2
来源:互联网 发布:易语言编程教学 编辑:程序博客网 时间:2024/04/30 11:44
无向图经过K个顶点的最少花费,每条路的权值相等均为1
# include <stdio.h># include <string.h># include <algorithm># include <vector>using namespace std;const int MAXN=1e4+10;const int INF=1e7;vector<int>vec[MAXN];int vis[MAXN];int ans[MAXN],num,longest,ending;void dfs (int u,int fa,int deep){ num++; vis[u]=1; if(deep>longest) { longest=deep; ending=u; //记录最长链的结束顶点 } for(int i=0;i<vec[u].size();i++) { int v=vec[u][i]; if(v!=fa) { dfs(v,u,deep+1); } }}void solve (int k) //num记录从k出发可以到达的点的个数,longest记录路径中最长的链的长度{ num=0; longest=0; dfs(k,-1,1); longest=0; num=0; dfs(ending,-1,1); //两遍dfs保证所找的链是当前连通图中最长的,第二遍主要是更新longest,num实际上是不变的 for(int i=1;i<=longest;i++) { ans[i]=min(ans[i],i-1); } for(int i=longest+1;i<=num;i++) { ans[i]=min(ans[i],2*i-longest-1); }}int main (){ int t,n,m,u,v,k,q; scanf("%d",&t); for(int ca=1;ca<=t;ca++) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) vec[i].clear(); for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); vec[u].push_back(v); vec[v].push_back(u); } memset(vis,0,sizeof(vis)); for(int i=1;i<=MAXN;i++) { ans[i]=INF; } for(int i=1;i<=n;i++) { if(!vis[i]) solve(i); //相当于在每一个连通分量中更新最少花费的值 } scanf("%d",&k); printf("Case %d:\n",ca); while(k--) { scanf("%d",&q); if(ans[q]==INF) printf("impossible\n"); else printf("%d\n",ans[q]); } } return 0;}
0 0
- UVA 12437 Kisu Pari Na 2
- Kisu Pari Na 2
- uva 11170 - Cos(NA)
- na
- NA
- NA
- C++pari的用法
- pari的用法(stl)
- NA心得
- 思科有意收购Pari Networks
- Cisco picks up Pari Networks
- R语言 na.fail和na.omit
- na lab1 AC了......
- NA(P)T
- na很郁闷
- Farewell, Li Na
- NA 和 NULL
- NA主要课程内容
- linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
- Dijkstra模板
- 使用移位操作符实现无符号整数位反转
- KMP 算法完整版
- Unique Path II
- UVA 12437 Kisu Pari Na 2
- 计算机字符编码
- 安装Tomcat,过程中需要配置的环境变量及遇到的问题
- HDU5326-Work (建反图,遍历)
- IOS开发概述-09.UIController和控制器的View
- python内置函数(三)
- linux中文显示乱码问题
- 【进阶android】Volley源码分析——Volley的工具【StringRequest】
- 软件测试面试题-简答题