题意:输入着火点n,求结点1到结点n的所有路径,按字典序输出,要求结点不能重复经过。

分析:用并查集事先判断结点1是否可以到达结点k,否则会超时。dfs即可。

#pragma comment(linker, "/STACK:102400000, 102400000")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define Min(a, b) ((a < b) ? a : b)
#define Max(a, b) ((a < b) ? b : a)
typedef long long ll;
typedef unsigned long long llu;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {, , -, , -, -, , };
const int dc[] = {-, , , , -, , -, };
const int MOD = 1e9 + ;
const double pi = acos(-1.0);
const double eps = 1e-;
const int MAXN = + ;
const int MAXT = + ;
using namespace std;
int fa[MAXN];
int pic[MAXN][MAXN];
int vis[MAXN];
int ans[MAXN];
int cnt;
int n;
int Find(int v){
return fa[v] = (fa[v] == v) ? v : Find(fa[v]);
}
void dfs(int cur){
if(ans[cur] == n){
++cnt;
for(int i = ; i <= cur; ++i){
if(i != ) printf(" ");
printf("%d", ans[i]);
}
printf("\n");
}
else{
for(int i = ; i <= ; ++i){
if(pic[ans[cur]][i] && !vis[i]){
vis[i] = ;
ans[cur + ] = i;
dfs(cur + );
vis[i] = ;
}
}
}
}
int main(){
int kase = ;
while(scanf("%d", &n) == ){
int x, y;
memset(pic, , sizeof pic);
memset(vis, , sizeof vis);
memset(ans, , sizeof ans);
cnt = ;
for(int i = ; i < MAXN; ++i){
fa[i] = i;
}
while(scanf("%d%d", &x, &y) == ){
if(!x && !y) break;
pic[x][y] = ;
pic[y][x] = ;
int tx = Find(x);
int ty = Find(y);
if(tx < ty) fa[ty] = tx;
else if(tx > ty) fa[tx] = ty;
}
printf("CASE %d:\n", ++kase);
if(Find(n) != ){
printf("There are 0 routes from the firestation to streetcorner %d.\n", n);
continue;
}
vis[] = ;
ans[] = ;
dfs();
printf("There are %d routes from the firestation to streetcorner %d.\n", cnt, n);
}
return ;
}

UVA - 208 Firetruck(消防车)(并查集+回溯)的更多相关文章

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

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

  2. UVa 208 - Firetruck 回溯+剪枝 数据

    题意:构造出一张图,给出一个点,字典序输出所有从1到该点的路径. 裸搜会超时的题目,其实题目的数据特地设计得让图稠密但起点和终点却不相连,所以直接搜索过去会超时. 只要判断下起点和终点能不能相连就行了 ...

  3. UVA 11987 - Almost Union-Find(并查集)

    UVA 11987 - Almost Union-Find 题目链接 题意:给定一些集合,操作1是合并集合,操作2是把集合中一个元素移动到还有一个集合,操作3输出集合的个数和总和 思路:并查集,关键在 ...

  4. UVA 12232 Exclusive-OR(并查集+思想)

    题意:给你n个数,接着三种操作: I p v :告诉你 Xp = v I p q v :告诉你 Xp ^ Xq = v Q k p1 p2 … pk:问你k个数连续异或的结果 注意前两类操作可能会出现 ...

  5. UVA - 1197 (简单并查集计数)

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...

  6. UVA 10158 War(并查集)

    //思路详见课本 P 214 页 思路:直接用并查集,set [ k ]  存 k 的朋友所在集合的代表元素,set [ k + n ] 存 k  的敌人 所在集合的代表元素. #include< ...

  7. UVA - 11987 Almost Union-Find 并查集的删除

    Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, you're to imp ...

  8. uva 6910 - Cutting Tree 并查集的删边操作,逆序

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. UVA 11987 Almost Union-Find 并查集单点修改

                                     Almost Union-Find I hope you know the beautiful Union-Find structur ...

随机推荐

  1. C/C++ kubetu

    reference sign & use predefine in c, but const in c++

  2. CodeForces--TechnoCup--2016.10.15--ProblemA--Transformation: from A to B

    http://codeforces.com/contest/727/problem/A Transformation: from A to B time limit per test 1 second ...

  3. Linux关闭防火墙,关闭Selinux

    查看防火墙状态 iptables -L or service iptables status 临时性关闭防火墙 iptables -F or service iptables stop 永久性关闭防火 ...

  4. VirtualBox中CentOS通过Host-Only方式实现虚拟机主机互相访问、共享上网

    VirtualBox常用的网络配置如下: 连接方式 主机访问虚拟机 虚拟机访问主机 虚拟机访问虚拟机 虚拟机访问外网 说明 网络地址转换(NAT) 不支持 支持 不支持 支持 默认连接方式,虚拟IP, ...

  5. WindowsAPI 之 CreatePipe、CreateProcess

    MSDN介绍 CreatePipe A pipe is a section of shared memory that processes use for communication. The pro ...

  6. asp 正则替换函数

    Function RegExpTest(patrn,str1,strng) Dim regEx',str1 ' 建立变量 'str1 = "The quick brown fox jumpe ...

  7. js zhi网马

      大家对木马都不陌生了,它可能要算是计算机病毒史上最厉害的了,相信会使木马的人千千万万,但是 有很多人苦于怎么把木马发给对方,现在随着计算机的普及,在网络上我相信很少有人会再轻易的接收 对方的文件了 ...

  8. GridView规则显示图片

    首先是自定义的GridVIew,ListView嵌套GridVIew时必须自定义GridVIew,不嵌套时可以不用.这里的GridView会根据图片多少自动调节大小 //自定义的GridView ,以 ...

  9. Servlet程序开发--取得初始化配置信息

    代码: 两个初始化init方法,一起出现的话,有参的才起作用 package org.lxh.servletdemo ; import java.io.* ; import javax.servlet ...

  10. java实现文件转换成二进制存储与取出

    一.功能描述: 将文件转成二进制数据放入数据库中,需要的时候,便可以取出安装与使用. 二.数据库: 建立一个数据库字段存放转成二进制的图片,这个字段有一个要求就是要设置成blob类型的 CREATE  ...