-图论
文章平均质量分 80
virgoDd
Good afternoon,good evening and good night
展开
-
POJ 1258 Agri-Net(最小生成树 Kruskal)
题意 给你农场的邻接矩阵 求连通所有农场的最小消耗 和上一题一样裸的最小生成树 #include #include #include using namespace std; const int N = 105, M = 10050; int par[N], ans, n, m, t; struct edge { int u, v, w;} e[M]; bool cmp(edge a,原创 2014-10-22 10:37:18 · 1459 阅读 · 0 评论 -
POJ 1979 Red and Black(DFS 连通块中元素数量)
题意 求矩阵中包含‘@’的'.'连通块中元素数量 '@'也看做'.' 最基础的dfs了 #include #include using namespace std; const int N = 30; char mat[N][N]; int dx[4] = {0, 0, -1, 1}, dy[4] = { -1, 1, 0, 0}; int ans; void dfs(int r, i原创 2014-10-13 11:36:27 · 963 阅读 · 0 评论 -
HDU 3080 The plan of city rebuild(除点最小生成树)
题意 一个城市原来有l个村庄 e1条道路 又增加了n个村庄 e2条道路 后来后销毁了m个村庄 与m相连的道路也销毁了 求使所有未销毁村庄相互连通最小花费 不能连通输出what a pity! 还是很裸的最小生成树 把销毁掉的标记下 然后prim咯 结果是无穷大就是不能连通的 #include #include #include using namespace std; con原创 2014-11-16 23:11:50 · 1114 阅读 · 0 评论 -
POJ 2253 Frogger(最小最大距离)
题意 给你n个点的坐标 求第1个点到第2个点的所有路径中两点间最大距离的最小值 很水的floyd咯 #include #include #include #include using namespace std; const int N=205; double d[N][N]; int x[N],y[N],n; void floyd() { for(int k=1;k<=n;原创 2014-10-30 23:02:03 · 1258 阅读 · 0 评论 -
POJ 2570 Fiber Network(最短路 二进制处理)
题目翻译 一些公司决定搭建一个更快的网络,称为“光纤网”。他们已经在全世界建立了许多站点,这 些站点的作用类似于路由器。不幸的是,这些公司在关于站点之间的接线问题上存在争论,这样“光纤网”项目就被迫终止了,留下的是每个公司自己在某些站点之间铺设的线路。 现在,Internet 服务供应商,当想从站点 A传送数据到站点 B,就感到困惑了,到底哪个公司 能够提供必要的连接。请帮助供应商回答他们的查询原创 2014-10-30 22:15:14 · 1009 阅读 · 0 评论 -
ZOJ 1649 Rescue(有敌人迷宫BFS)
题意 求迷宫中从a的位置到r的位置需要的最少时间 经过'.'方格需要1s 经过‘x’方格需要两秒 '#'表示墙 由于有1s和2s两种情况 需要在基础迷宫bfs上加些判断 令到达每个点的时间初始为无穷大 当从一个点到达该点用的时间比他本来的时间小时 更新这个点的时间并将这个点入队 扫描完全图就得到答案咯 #include #include #include using names原创 2014-10-16 22:37:02 · 1289 阅读 · 0 评论 -
ZOJ 2913 Bus Pass (最近的最远BFS HDU2377)
题意 在所有城市中找一个中心满足这个中心到所有公交站点距离的最大值最小 输出最小距离和满足最小距离编号最小的中心 最基础的BFS 对每个公交站点BFS dis[i]表示编号为i的点到所有公交站点距离的最大值 bfs完所有站点后 dis[i]最小的点就是要求的点咯 #include #include #include #include using namespace std; typ原创 2014-10-18 22:12:05 · 1618 阅读 · 2 评论 -
ZOJ 1203 Swordfish(最小生成树 kruskal)
题意 给你n个点的坐标 每个点都可与其它n-1个点相连 求这n个点的最小生成树的权重 裸的最小生成树 直接kruskal咯 #include #include #include #include using namespace std; const int N = 105, M = 10050; double x[N], y[N], ans; int n, m , par[N]; s原创 2014-10-22 09:39:13 · 1245 阅读 · 0 评论 -
HDU 1863 畅通工程 (最小生成树是否存在)
题意 中文 入门最小生成树 prim大法好 #include #include using namespace std; const int N = 105; int cost[N], mat[N][N], n, m, ans; void prim() { memset(cost, 0x3f, sizeof(cost)); cost[1] = -1; int cur原创 2014-10-26 17:54:37 · 994 阅读 · 0 评论 -
CF 505B Mr. Kitayuta's Colorful Graph(最短路)
题意 求两点之间有多少不同颜色的路径 范围比较小 可以直接floyd #include #include using namespace std; const int N = 105; int d[N][N][N], ans; int main() { int a, b, c, n, m, q; while(~scanf("%d%d", &n, &m)) {原创 2015-01-19 09:06:39 · 1345 阅读 · 0 评论 -
UVa 10305 Ordering Tasks(拓扑排序)
题意 输出n个数m组小于关系的一种可能的拓扑排序 应用dfs拓扑排序 访问j时 若存在i #include using namespace std; const int N = 105; int n, m, t, v[N], tpo[N], g[N][N]; void dfs(int j) { if(v[j]) return; for(int i = 1; i <=原创 2015-01-23 15:28:42 · 1034 阅读 · 0 评论 -
ZOJ 1364 Machine Schedule(二分图最大匹配)
} int main() { int u, v, t; while(scanf("%d", &n), n) { memset(g, 0, sizeof(g)); scanf("%d%d", &m, &k); for(int i = 0; i < k; ++i) { scanf("%d%原创 2015-07-10 15:30:36 · 1350 阅读 · 0 评论 -
POJ 1094 Sorting It All Out(拓扑排序·判断+实现)
题意 由一些不同元素组成的升序序列是可以用若干个小于号将所有的元素按从小到大的顺序 排列起来的序列。例如,排序后的序列为 A, B, C, D,这意味着 A 每来一个小于关系就进行一次拓扑排序 直到出现冲突(也就是出现了环)或者已经能确定顺序 当结果已经确定时 后面的小于关系也就没有必要处理了 因此可以用一个flag标记结果是否已经确定 #include #include #i原创 2015-08-19 14:59:12 · 2256 阅读 · 0 评论 -
POJ 2585 Window Pains(拓扑排序·窗口覆盖)
题意 有一个4*4的显示器 有9个程序 每个程序占2*2个格子 他们的位置如图所示 当你运行某个程序时 这个程序就会显示在顶层覆盖其它的程序 给你某个时刻显示器的截图 判断此时电脑是否死机了(出现了不合法的覆盖关系) 拓扑排序的应用 关键是建图 当一个程序A的区域上有其它程序B时 说明A是在B之前运行的 那么我们可以建立一个A #include #include #原创 2015-08-19 16:11:44 · 1099 阅读 · 0 评论 -
ZOJ 2412 Farm Irrigation(DFS 条件连通块)
题意 两块农田里面的管道可以直接连接的话 他们就可以共用一个原创 2014-10-13 09:52:14 · 1040 阅读 · 0 评论 -
HDU 1385 Minimum Transport Cost (字典序打印最短路)
题意 给你一个无向图的邻接矩阵 和途径每个点需要的额外花费首尾没有额外花费 求图中某两点之间的最短路并打印字典序最小路径 要求多组点之间的就用floyd咯 打印路径也比较方便 nex[i][j]表示从i点到j点最短路的第一个途经点 那么如果路径中加入一个节点k后 nex[i][j]应该更新为nex[i][k] 因为要途径k了 #include #include using nam原创 2014-10-30 11:34:11 · 979 阅读 · 0 评论 -
ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)
题意 一只狗要逃离迷宫 可以往上下左右4个方向走 每走一步耗时1s 每个格子只能走一次且迷宫的门只在t时刻打开一次 问狗是否有可能逃离这个迷宫 直接DFS 直道找到满足条件的路径 或者走完所有可能路径都不满足 注意剪枝 当前位置为(r,c) 终点为(ex,ey) 剩下的时间为lt 当前点到终点的直接距离为 d=(ex-r)+(ey-c) 若多走的时间rt=lt-d原创 2014-10-12 21:17:13 · 921 阅读 · 0 评论 -
POJ 1861 Network(隐含最小生成树 打印方案)
题意 求n个点m条边的图的连通子图中最长边的最小值 实际上就是求最小生成树中的最长边 因为最小生成树的最长边肯定是所有生成树中最长边最小的 那么就也变成了最小生成树了 不要被样例坑到了 样例并不是最佳方案 只是最长边与最小生成树的最长边相等 题目是特判 直接用最小生成树做就行 #include #include #include using namespace std; co原创 2014-10-22 11:16:03 · 976 阅读 · 0 评论 -
POJ 1251 Jungle Roads(最小生成树)
题意 有n个村子 输入n 然后n-1行先输入村子的序号和与该村子相连的村子数t 后面依次输入t组s和tt s为村子序号 tt为与当前村子的距离 求链接所有村子的最短路径 还是裸的最小生成树咯 #include #include #include using namespace std; const int N=30,M=1000; int par[N],n,m,ans; struct原创 2014-10-23 09:56:24 · 893 阅读 · 0 评论 -
POJ 1287 Networking(最小生成树)
题意 给你n个点 m条边 求最小生成树的权 这是最裸的最小生成树了 #include #include #include using namespace std; const int N = 55, M = 3000; int par[N], n, m, ans; struct edge{int u, v, w;} e[M]; bool cmp(edge a, edge b){return原创 2014-10-23 10:25:54 · 2724 阅读 · 0 评论 -
POJ 2031 Building a Space Station
题意 有n个空间站 接下n行依次输入n个空间站的x,y,z坐标和半径 求连接所有空间站总共至少要修多长的桥 也是裸的最小生成树 注意距离不会小于0 就是两个空间站相交的时候 #include #include #include #include using namespace std; const int N = 105, M = 10050; int par[N], n, m; d原创 2014-10-23 10:49:22 · 911 阅读 · 0 评论 -
POJ 2421 Constructing Roads(最小生成树)
题意 在n个村庄之间修路使所有村庄连通 其中有些路已经修好了 求至少还需要修多长路 还是裸的最小生成树 修好的边权值为0就行咯 #include #include #include #include using namespace std; const int N = 105, M = 10050; int par[N], n, m, mat[N][N]; int ans; struc原创 2014-10-23 11:16:40 · 915 阅读 · 0 评论 -
ZOJ 1586 QS Network(最小生成树 prim)
题意 输入n 然后输入n个数 代表连接时每个站点自身的消耗 然后输入n*n的矩阵 第i行第j列的数代表第i个站点和第j个站点之间路上的花费 链接i,j两个节点的总花费为两站点自身花费加上路上的花费 求⑩这n个站点连通的最小总花费 又是裸的最小生成树 给点的就用prim咯 #include #include #include using namespace std; const原创 2014-10-24 15:25:41 · 1141 阅读 · 0 评论 -
POJ 1789 Truck History(最小生成树)
题意 有n辆卡车 每辆卡车用7个字符表示 输入n 再输入n行字符 第i行与第j行的两个字符串有多少个对应位置的字符不同 i与j之间的距离就是几 求连接所有卡车的最短长度 题目不是这个意思 这样理解就行了 prim啦啦啦啦 #include #include using namespace std; const int N = 2005; int cost[N], dis[N]原创 2014-10-24 19:50:51 · 1131 阅读 · 0 评论 -
POJ 1135 Domino Effect(最短路 多米诺骨牌)
题意 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两张骨牌之间只有很短的空隙。如果排列得很好,当你推 倒第 1张骨牌,会使其他骨牌连续地倒下(这就是短语“多米诺效应”的由来)。 然而当骨牌数量很少时,这种玩法就没多大意思了,所以一些人在 80 年代早期开创了另一个 极端的多米诺骨牌游戏:用上百万张不同颜色原创 2014-10-26 21:34:13 · 2519 阅读 · 0 评论 -
POJ 1386 Play on Words(有向欧拉通路 连通图)
题意 见下方中文翻译 每个单词可以看成首尾两个字母相连的一条边 然后就是输入m条边 判断能否构成有向欧拉通路了 有向图存在欧拉通路的充要条件: 1. 有向图的基图连通; 2. 所有点的出度和入度相等 或者 只有两个入度和出度不相等的点 且这两点入度与出度的差一个为-1(起点)一个为1(终点). 判断是否连通就是应用并查集了 #include #include usi原创 2014-11-12 07:59:08 · 1425 阅读 · 0 评论 -
POJ 1300 Door Man(欧拉通路)
题目描述: 你是一座大庄园的管家。庄园有很多房间,编号为 0、1、2、3,...。你的主人是一个心不在 焉的人,经常沿着走廊随意地把房间的门打开。多年来,你掌握了一个诀窍:沿着一个通道,穿 过这些大房间,并把房门关上。你的问题是能否找到一条路径经过所有开着门的房间,并使得: 1) 通过门后立即把门关上; 2) 关上了的门不再打开; 3) 后回到你自己的房间(房间 0),并且所有的门都已经关闭了原创 2014-11-11 15:55:31 · 931 阅读 · 0 评论 -
HDU 1874 畅通工程续 (基础最短路)
题意 中文 最基础的最短路 注意边可能多次给出 取最小的 #include #include using namespace std; const int N = 205, M = 1005; int mat[N][N], v[N], d[N], n, m, s, t; void dijkstra() { memset(d, 0x3f, sizeof(d)); mems原创 2014-10-26 16:55:09 · 868 阅读 · 0 评论 -
POJ 2240 Arbitrage(最短路 套汇)
题意 给你n种币种之间的汇率关系 判断能否形成套汇现象 即某币种多次换为其它币种再换回来结果比原来多 基础的最短路 只是加号换为了乘号 #include #include #include #include using namespace std; map na; const int N = 31; double d[N], rate[N][N], r; int n, m, ans;原创 2014-10-29 10:17:53 · 1757 阅读 · 0 评论 -
POJ 1659 Frogs' Neighborhood(度序列构图)
题意 中文 根据Havel-Hakimi定理构图就行咯 先把顶点按度数从大到小排序 可图的话 度数大的顶点与它后面的度数个顶点相连肯定是满足的 出现了-1就说明不可图了 #include #include #include using namespace std; const int N = 20; int mat[N][N], ord[N]; bool cmp(int i, in原创 2014-10-11 09:21:02 · 1223 阅读 · 0 评论 -
POJ 1128 Frame Stacking(拓扑排序·打印字典序)
题意 给你一些矩形框堆叠后的俯视图 判断这些矩形框的堆叠顺序 每个矩形框满足每边都至少有一个点可见 输入保证至少有一个解 按字典序输出所有可行解 和上一题有点像 只是这个要打印所有的可行方案 建图还是类似 因为每个矩形框的四边都有点可见 所以每个矩形框的左上角和右下角的坐标是可以确定的 然后一个矩形框上有其它字符时 就让这个矩形框对应的字符和那个其它字符建立一个小于关系 由原创 2015-08-20 10:29:13 · 1106 阅读 · 0 评论