要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可

#include<bits/stdc++.h>
using namespace std;
const int maxn = ; int p[maxn],cnt[maxn];
void init(int n) {
for(int i = ;i <= n; i++) p[i] = i,cnt[i] = ;
}
int Find(int x) { return p[x] == x ? x : p[x] = Find(p[x]); } bool G0[maxn][maxn];
int G[maxn][maxn],deg[maxn]; int maxd;
int path[maxn];
bool vis[maxn];
int k,Count;
void dfs(int d,int cur)
{
if(cur == k){
printf("");
for(int i = ; i < d; i++)
printf(" %d",path[i]);
puts("");
Count++;
return;
}
if(d == maxd) return;
for(int i = ; i < deg[cur]; i++){
int v = G[cur][i];
if(vis[v]) continue;
vis[v] = ;
path[d] = v;
dfs(d+,v);
vis[v] = ;
}
} int main()
{
//freopen("in.txt","r",stdin);
int cas = ;
while(~scanf("%d",&k)){
printf("CASE %d:\n",++cas);
int u,v,n = ;
init();
memset(G0,,sizeof(G0));
memset(deg,,sizeof(deg));
while(scanf("%d%d",&u,&v),u){
G0[u][v] = G0[v][u] = ;
n = max(n,v);
n = max(n,u);
int s1 = Find(u), s2 = Find(v);
if(s1 != s2) {p[s1] = s2; cnt[s2] += cnt[s1];}
}
if(Find(k) != Find()) {printf("There are 0 routes from the firestation to streetcorner %d.\n",k); continue;}
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++) if(G0[i][j]){
G[i][deg[i]++] = j;
}
maxd = cnt[Find()] ;
memset(vis,,sizeof(vis));
vis[] = ;
Count = ;
dfs(,);
printf("There are %d routes from the firestation to streetcorner %d.\n",Count,k);
}
return ;
}

UVA208 Firetruck 消防车(并查集,dfs)的更多相关文章

  1. UVA - 208 Firetruck(并查集+dfs)

    题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...

  2. HDU 1232 并查集/dfs

    原题: http://acm.hdu.edu.cn/showproblem.php?pid=1232 我的第一道并查集题目,刚刚学会,我是照着<啊哈算法>这本书学会的,感觉非常通俗易懂,另 ...

  3. 1021.Deepest Root (并查集+DFS树的深度)

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...

  4. POJ1291-并查集/dfs

    并查集 题意:找出给定的这些话中是否有冲突.若没有则最多有多少句是对的. /* 思路:如果第x句说y是对的,则x,y必定是一起的,x+n,y+n是一起的:反之x,y+n//y,x+n是一起的. 利用并 ...

  5. F2 - Spanning Tree with One Fixed Degree - 并查集+DFS

    这道题还是非常有意思的,题意很简单,就是给定一个图,和图上的双向边,要求1号节点的度(连接边的条数)等于K,求这棵树的生成树. 我们首先要解决,如何让1号节点的度时为k的呢???而且求的是生成树,意思 ...

  6. UVA208-Firetruck(并查集+dfs)

    Problem UVA208-Firetruck Accept:1733  Submit:14538 Time Limit: 3000 mSec  Problem Description The Ce ...

  7. 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)

    贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于  ...

  8. Codeforces 455C Civilization(并查集+dfs)

    题目链接:Codeforces 455C Civilization 题目大意:给定N.M和Q,N表示有N个城市,M条已经修好的路,修好的路是不能改变的.然后是Q次操作.操作分为两种.一种是查询城市x所 ...

  9. hdu6370 并查集+dfs

    Werewolf Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

随机推荐

  1. BootStrap 概念

    网格系统中的缩写; xs   extra  small sm  smal md  middle/medium lg    large

  2. 在windwo server2008服务器上配置ftp服务器、及配置phpstrom工具、实现项目同步。

    在windwo server2008服务器上配置ftp服务器.及配置phpstrom工具.实现项目同步. 在windwo server2008服务器上配置ftp服务器 参考该篇文章:http://bl ...

  3. matlab新手入门(一)(翻译)

    桌面基础知识 启动MATLAB®时,桌面将以其默认布局显示. 桌面包括以下面板: 当前文件夹 - 访问您的文件. 命令窗口 - 在命令行中输入命令,由提示符(>>)指示. 工作区 - 浏览 ...

  4. HDU - 4821 String(窗口移动+map去重+hash优化)

    String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...

  5. 数据库路由中间件MyCat - 使用篇(3)上篇

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全局序列号 数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯 ...

  6. jmeter后置处理器之正则表达式

    一.基本用法——提取某个值 场景:提取某个值,保存成变量,供后面的接口使用 步骤: 1.运行脚本,从响应结果中查找要提取的值,找到左右边界. 例如要获取“patientInfoId”作为下一个请求的参 ...

  7. WC-第二次作业

    WordCount 第二次作业 码云地址:https://gitee.com/lgcj1218/WordCount/tree/master 一.解题思路 本次作业采用的c#语言 按功能分为了三个类 , ...

  8. 启动Eclipse时,出现 “Failed to load the JNI shared library "C:\Program Files\java\jdk1.7.....\jvm.dll"

    原因1:给定目录下jvm.dll不存在. 解决方法:(1)重新安装jre或者jdk并配置好环境变量. (2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本 ...

  9. js根据等号(=)前名称获取参数值

    var GetUrlParam=function (paraName) { var url = document.location.toString(); var arrObj = url.split ...

  10. myeclipse 最佳设置

    http://www.cnblogs.com/wuyifu/p/3593035.html