uva-208-枚举-并查集
题意:
给你一个图,从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-枚举-并查集的更多相关文章
- POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...
- BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
[HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...
- bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】
枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...
- bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】
m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...
- nyoj 711 枚举+并查集
#include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断 #include<stdlib.h>//枚举最大的一条边肯定 ...
- 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...
- UVA - 12232 Exclusive-OR (并查集扩展偏离向量)
Description You are not given n non-negative integersX0,X1,..., Xn-1 less than220, but they do exist ...
- 紫书 习题11-11 UVa 1644 (并查集)
这道题感觉思路非常巧妙, 我是看了别人的博客才想明白的. 这里用到了并查集, 以根节点为中心城市, 然后把边从大到小排序, 每次的当前的边即为容量, 因为是目前的最小值, 然后去算总的容量, 每次选容 ...
- SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
<传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...
- HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)
一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...
随机推荐
- AFN不支持 "text/html" 的数据的问题:unacceptable content-type: text/html
使用AFN若遇到这个错误信息 Request failed: unacceptable content-type: text/html bug原因: 这不是AFNetworking的问题 这是做Ser ...
- 用pthon来写个跳板机
用pthon来写个跳板机 1.需求 程序一:1.后台管理- 堡垒机上创建用户和密码(堡垒机root封装的类,UserProfile表)- .bashrc /usr/bin/python3 /dat ...
- Thrift 个人实战--初次体验Thrift(转)
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- npm bower gulp
npm即nodejs package manager ,是nodeJs的包管理工具,使用前需安装nodeJs(https://www.npmjs.com.cn/getting-started/inst ...
- yarn 知识点
yarn 与 npm 功能对应表格: 命令 yarn npm 初始化 yarn init npm init 安装项目所有包(注意) yarn npm install 添加 dependencies y ...
- HTTP报头:通用报头,请求报头,响应报头和实体报头
缓存控制优先级从高到低分别是Pragma -> Cache-Control -> Expires 报头 每一个报头都是由 [名称 + ":" + 空格 + 值 + ] ...
- webpack入门认知
webpack 是什么? 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖 ...
- Windows 7 With Sp1 简体中文旗舰版
Windows 7 With Sp1 简体中文旗舰版(MSDN官方原版) 安装Windows 7对于硬件配置的基本要求: •1 GHz 32 位或 64 位处理器 •1 GB 内存(基于32 位)或 ...
- python学习笔记--装饰器
1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...
- springMVC学习(11)-json数据交互和RESTful支持
一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...