题意:

给你一个图,从1到指点的点有多少种不同的路径,用了并查集剪枝,如果当前节点的根不是指定的节点,直接返回,会超时

time limit了俩次,wa了俩次,PE俩次

#include <iostream>
#include <stdio.h>
#include<memory.h>
using namespace std; #define null NULL
const int N = 25;
int final = -1;
int mindex[N];
int map[N][N];
int vis[N];
int res[N];
int n, m;
int total = 0; int set[N];
int p(int s)
{
return set[s] == s ? s : set[s] = p(set[s]);
}
void add(int s, int e)
{
int p1 = p(s);
int p2 = p(e);
int t = s == final ? s : e;
if (t != final)
t = p1 == final ? p1 : p2;
if (t == final)
{
set[t] = final;
set[p1] = final;
set[p2] = final;
set[s] = final;
set[e] = final;
return;
}
if (p1 < p2)
{
set[p2] = p1;
}
else
{
set[p1] = p2;
}
} void read()
{
for (int i = 0; i < N; i++)
set[i] = i; int s, e;
while (cin >> s >> e)
{
if (s == 0 && e == 0)
return;
map[s][mindex[s]++] = e;
map[e][mindex[e]++] = s;
add(s, e);
}
} void sort(int l, int t, int a[])
{
for (int i = 0; i < t; i++)
{
for (int j = 1; j < t - i; j++)
{
if (a[j - 1] > a[j])
{
int t = a[j - 1];
a[j - 1] = a[j];
a[j] = t;
}
}
}
} void dfs(int cur, int rl)
{
if (cur == final)
{
printf("%d",res[0]);
for (int i = 1; i <= rl; i++)
{
printf(" %d", res[i]);
}
cout << endl;
++total;
return;
}
if (p(cur) != final)
return;
for (int i = 0; i < mindex[cur]; i++)
{
if (vis[map[cur][i]] == 0)
{
vis[map[cur][i]] = 1;
res[rl + 1] = map[cur][i];
dfs(map[cur][i], rl + 1);
vis[map[cur][i]] = 0;
}
}
} int main(int argc, char* argv[])
{
freopen("C:\\Users\\zzzzz\\Desktop\\1.txt", "r", stdin);
int t = 1;
string str =
"There are %d routes from the firestation to streetcorner %d.";
while (cin >> final)
{
memset(map, 0, sizeof(map));
memset(mindex, 0, sizeof(mindex));
memset(vis, 0, sizeof(vis));
read();
total = 0;
cout << "CASE " << t << ":" << endl;
for (int i = 1; i <= final; i++)
sort(i, mindex[i], map[i]);
vis[1] = 1;
res[0] = 1;
dfs(1, 0);
printf(str.c_str(), total, final);
cout<<endl;
++t;
} return 0;
}

  

uva-208-枚举-并查集的更多相关文章

  1. POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)

    题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...

  2. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)

    [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...

  3. bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】

    枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...

  4. bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】

    m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...

  5. nyoj 711 枚举+并查集

     #include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断 #include<stdlib.h>//枚举最大的一条边肯定 ...

  6. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

  7. UVA - 12232 Exclusive-OR (并查集扩展偏离向量)

    Description You are not given n non-negative integersX0,X1,..., Xn-1 less than220, but they do exist ...

  8. 紫书 习题11-11 UVa 1644 (并查集)

    这道题感觉思路非常巧妙, 我是看了别人的博客才想明白的. 这里用到了并查集, 以根节点为中心城市, 然后把边从大到小排序, 每次的当前的边即为容量, 因为是目前的最小值, 然后去算总的容量, 每次选容 ...

  9. SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何

    <传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...

  10. HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)

    一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...

随机推荐

  1. Navicat #1045 - Access denied for user 'root'@'localhost' (using password: NO)

    Navicat #1045 - Access denied for user 'root'@'localhost' (using password: YES) 出现上述问题,原因在于本机还开了APMS ...

  2. 20155117王震宇 2016-2017-2 《Java程序设计》第七周学习总结

    教材学习内容总结 时间度量 格林尼治标准时间(GMT):现在GMT已不作为标准时间使用. 世界时(UT):借助观测远方星体跨过子午线而得,受地球自转速度影响. 国际原子时(TAI):铯原子辐射振动幅度 ...

  3. unicode汉字编码

    原来我使用的一直是 \u4e00-\u9fa5 ,今天在匹配中文标点的时候匹配不上,就查了一下相关资料,原来unicode跟中文有关的范围还有好几个. 字符范围表 1.标准CJK文字 范围:\u340 ...

  4. Fire Game 双向bfs

    Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...

  5. Hash表的平均查找长度ASL计算方法

    Hash表的“查找成功的ASL”和“查找不成功的ASL” ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数: H(Key) = (key x 3) MOD 7 ...

  6. 下载各个版本java (Java Development Kit)

    本文介绍怎么样下载各个版本java开发工具包. 方法/步骤   打开官方下载网址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  7. Reaction 开源可自定义实时的电商平台

    Reaction 开源可自定义实时的电商平台,支持以下特性 拖放商品 订单处理 支付 物流 税 折扣 Analytics(分析) 与许多第三方应用程序集成 graphql 开发api 简单demo 使 ...

  8. ory Oathkeeper docker-compose 安装运行

    Oathkeeper 相关介绍可以参考官方文档,主要就是cloud native 身份以及访问代理 运行环境使用docker 安装(api proxy ) Dockerfile api: docker ...

  9. Oracle:Decode在时间范围中的使用

    做查询的时候需要下一个sql,需要select test_time出来,如果test_Time的HH24:Mi:SS在7:00:00和19:00:00返回白班,否则返回夜班 select case w ...

  10. linux mutt的安装和使用

    首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件. 我只讲它很小的一部分功能,因为我 ...