题意:

给你一个图,从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. 游标 cursor

    * mongo shell下支持JS代码,可以通过JS获取游标,进而获取数据操作结果. var cursor = db.class1.find() cursor.next() 获取下一条结果 curs ...

  2. Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法

    问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...

  3. CodeForces - 1098.DIV1.C: Construct a tree(贪心,构造)

    Misha walked through the snowy forest and he was so fascinated by the trees to decide to draw his ow ...

  4. OASGraph 转换rest api graphql 试用

    创建rest api lb4 appdemo 参考提示即可 安装 OASGraph git clone https://github.com/strongloop/oasgraph.git cd oa ...

  5. 哈勃(Hubble)望远镜的新发现

             请看下图: itok=FcRLe7t_" name="图形1" alt="" border="0" height ...

  6. C#:消息队列应用程序

    Carl NolanMicrosoft Corporation 摘要:本文概述一种用于处理若干消息队列的 Windows 服务解决方案,重点介绍 .NET 框架和 C# 应用程序. 下载 CSharp ...

  7. C语言利用SMTP协议发送邮件

    #ifdef WIN32 #include <windows.h> #include <stdio.h> #else #include <stdio.h> #inc ...

  8. PHP 的工作流组件记录

    我目前只知道在有审批流程中会用到工作流. 不过我我还没用过,还不知道怎么使用. 暂且先记录一下,目前我找到的几个 PHP 工作流组件. symfony https://github.com/symfo ...

  9. tomcat源码阅读之日志记录器(Logger)

    UML图: 1.Logger接口中定义了日志的级别:FATAL.ERROR.WARNING.INFORMATION.DEBUG,通过接口函数getVerbosity获取日志级别,setVerbosit ...

  10. java 中一些需要注意的知识点

    java数组的length属性是容量,而不是数组真实元素的个数: 多线程中的interrupt()方法并不会终止处于"运行状态"的线程,它只是将线程的中断标记设为true. juc ...