图论
范晓天
给我一片蓝天,让我飞得更高……
展开
-
Timus 1040. Airline company
<br />/* <br /> * File: Timus 1040. Airline company<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月2日, 上午9:34<br /> * 题解:一次找极长路(即两边不能再加边),将他们依次编号,然后删掉这些边。直至图中没有边为止。输出解即可。<br /> * 不会出现没有解的情况。<br /> */<br /> <br />#include <iostream>原创 2010-10-02 10:14:00 · 438 阅读 · 0 评论 -
Timus 1045. A funny game
<br />/* * File: Timus 1045. A funny game * Author: xiaotian @ hnu * Created on 2010年10月4日, 上午9:51 * 题解: */#include<iostream>#include<stdio.h>#include<queue>using namespace std;#define N 1008struct arr { int win, used;} f[10原创 2010-10-05 13:14:00 · 272 阅读 · 0 评论 -
最短路计数
<br />#include<stdio.h>#include<iostream>#include<string.h>#include<queue>#include<set>#include<math.h>using namespace std;#define N 1008#define inf 0x7ffffffstruct node { int e, d; node(int a, int b) : e(a), d(b) {} bool o原创 2010-10-08 10:50:00 · 367 阅读 · 0 评论 -
PKU 3522 Slim Span
<br />最瘦生成树<br /> <br />即求生成树中最大边和最小边差值最小<br /> <br />/* * File: PKU 3522 Slim Span * Author: xiaotian @ hnu * Created on 2010年10月8日, 上午11:10 * 题解:最瘦生成树 */#include<stdio.h>#include<iostream>#include<string.h>#include<queue>#include<ma原创 2010-10-08 13:03:00 · 465 阅读 · 0 评论 -
PKU 2377 Bad Cowtractors
<br /> <br />最大生成树<br /> <br />最大生成树/* * File: PKU 2377 Bad Cowtractors * Author: xiaotian @ hnu * Created on 2010年10月8日, 上午11:10 * 题解:最大生成树 */#include<stdio.h>#include<iostream>#include<string.h>#include<queue>#include<map>#includ原创 2010-10-08 12:25:00 · 391 阅读 · 0 评论 -
HNU 10862 Ticket to Ride
<br />所谓最小斯泰纳树,很裸,直接套版<br /> <br />/* * File: HNU 10862 Ticket to Ride * Author: xiaotian @ hnu * Created on 2010年10月6日, 下午7:48 * 题解:最小斯泰纳树,直接套板 */#include<stdio.h>#include<iostream>#include<string>#include<queue>#include<map>#incl原创 2010-10-06 20:49:00 · 376 阅读 · 1 评论 -
PKU 3463 Sightseeing
<br />PKU 3463 Sightseeing<br /><br />题解:求最短路以及次短路(比最短路长1)的路的条数,递推求解,四种转移<br /> <br />/* * File: PKU 3463 Sightseeing * Author: xiaotian @ hnu * Created on 2010年10月8日, 上午9:24 * 题解:求最短路以及次短路(比最短路长1)的路的条数,递推求解,四种转移 */#include<stdio.h>#includ原创 2010-10-08 10:19:00 · 431 阅读 · 0 评论 -
HNU 11072 && PKU 3635 Full Tank?
优先队列广搜/* * File: PKU 3635 Full Tank? * Author: xiaotian @ hnu * Created on 2010年10月8日, 下午4:27 * 题解:优先队列bfs */#include#include#include#include#include#include#includeusing namespace std;#define N 1008#define inf 0x7fffffffs原创 2010-10-08 17:06:00 · 506 阅读 · 0 评论 -
Timus 1069. The Prufer code
<br /> * File: Timus 1069. The Prufer code<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月9日, 上午9:35<br /> * 题解:思维题目。给定一棵树的编码方式,让还原这棵树。<br /> * 编码方式:每次取编号最小的叶节点和与其相连的边删掉,写下这个叶节点的父亲节点。重复以上操作,直到只有一个节点的时候,这个节点编号必然是 n 。<br /> * 还原方式:可以发现原创 2010-10-09 10:25:00 · 338 阅读 · 0 评论 -
PKU 3207 Ikki's Story IV - Panda's Trick
<br /> * File: PKU 3207 Ikki's Story IV - Panda's Trick<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月11日, 上午9:52<br /> * 题解:经典的2-sat问题,把连线看成点,每条线有两种形式,即圆内(r)、圆外(r')。<br /> * 建图方法:假设两条线(a,b)的同一种形式会相交,那么如果选择 ar,那么必定不能选择 br,只能选择 br'<br原创 2010-10-11 10:41:00 · 406 阅读 · 0 评论 -
PKU 3678 Katu Puzzle
<br /> * File: PKU 3678 Katu Puzzle<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月11日, 上午9:52<br /> * 题解:2-sat问题求解<br /> * 建图:按照如下方法添边<br /> * (1)A and B = 0 A->!B , B->!A<br /> * (2)A and B = 1 !A->A , !B->B<br /> * (3)A or原创 2010-10-11 13:23:00 · 414 阅读 · 1 评论 -
闲话最小生成树
<br />最小生成树,什么是最小生成树?<br /><br />比较官方的定义:设G=(V,E)是一个无向连通带权图,即一个网络。E中每条边(u,v)的权为cost。如果G的子图G‘是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上边权总和为该生成树的耗费。在G的所有生成树中,耗费最小的即为G的最小生成树。<br /><br />简单的说:一个连通图中,用花费最少的边使得该图依然连通。<br /><br />解决最小生成树问题,是一个经典的贪心过程。通常有两种算法<br /><br /原创 2010-10-05 11:01:00 · 264 阅读 · 0 评论 -
spfa 差分约束
<br />spfa 差分约束<br /> <br />/* spfa 差分约束首先构造约束图,构造不等式时>=表示求最小值, 作为最长路,<=表示求最大值, 作为最短路 (v-u <= c:a[u][v] = c)用addedge加如所有的边返回0表示无解,返回1表示有可行解,可行解存在 dis 数组里 */bool vis[N];int cnt[N],dis[N],head[N];int V[E], next[E];int W[E];int ne, n, m;void原创 2010-10-04 11:19:00 · 278 阅读 · 0 评论 -
强连通分量 tarjan 模板
/*Tarjan强连通分量INIT: g[]为邻接表; stop, cnt, scnt置0; pre[]置-1;CALL: for(i=0; i g[N];int id[N], pre[N], low[N], s[N], stop, cnt, scnt;void tarjan(int v, int n) // vertex: 0 ~ n-1{ int t, minc = low[v] = pre[v] = cnt++; s[stop++] = v; for原创 2010-10-06 10:59:00 · 557 阅读 · 0 评论 -
最大团模板
<br />最大团模板<br /> <br />void clique(int n, int* u, int mat[][MAXN], int size, int& max, int& bb, int* res, int* rr, int* c) { int i, j, vn, v[MAXN]; if (n) { if (size + c[u[0]] <= max) return; for (i = 0; i < n + size - max && i原创 2010-10-02 16:51:00 · 348 阅读 · 0 评论 -
最短路 dijkstra 优先队列优化
<br /> <br />Dijkstra O(E * log E)<br /> <br />/* Dijkstra O(E * log E)INIT: 调用init(nv, ne)读入边并初始化;CALL: dijkstra(n, src); dist[i]为src到i的最短距离 */int cost[E], dist[V];int e, pnt[E], nxt[E], head[V], prev[V], vis[V];struct qnode { int v; i原创 2010-10-04 10:50:00 · 731 阅读 · 0 评论 -
Timus 1742. Team building
<br />Timus 1742. Team building<br /> <br />/* * File: Timus 1742. Team building * Author: xiaotian @ hnu * Created on 2010年10月4日, 下午2:54 * 题解: */#include <iostream>#include <string>#include <set>#include <map>#include <vector>#inc原创 2010-10-04 15:53:00 · 312 阅读 · 0 评论 -
PKU 2449 Remmarguts' Date(第 k 短路模板)
<br /> PKU 2449 Remmarguts' Date<br /> <br />/* * File: PKU 2449 Remmarguts' Date * Author: xiaotian @ hnu * Created on 2010年10月5日, 上午10:25 * 题解:求第 k 短路,dijkstra + A* 搜索 */#include<iostream>#include<stdio.h>#include<string.h>#include<q原创 2010-10-05 10:42:00 · 1055 阅读 · 2 评论 -
强连通分量(POJ 2186 Popular Cows)
<br />/* <br /> * File: PKU 2186 Popular Cows<br /> * Author: xiaotian @ hnu<br /> * Created on 2010年10月6日, 上午9:50<br /> * 题解:求强连通分量、缩点。<br /> * 检查出度为0的“点”的个数,这里的点指的是每一个强连通分量<br /> * 当出度为 0 “点”的个数仅为 1 时输出该联通分量里的点的个数<br /> * 否则输出 0 。<br />原创 2010-10-06 10:56:00 · 270 阅读 · 0 评论 -
Timus 1035. Cross-stitch
File: Timus 1035. Cross-stitch Author: xiaotian @ hnu Created on 2010年9月30日, 上午9:06 题解:把网格交叉点抽象成顶点,正面线抽象为正边,反面的抽象为反边。 求联通块,分别求出每个联通块的针数,最后相加即为答案。/* * File: Timus 1035. Cross-stitch * Author: xiaotian @ hnu * Created on 2010年9月30日, 上午9原创 2010-09-30 12:04:00 · 327 阅读 · 0 评论 -
HDU 3666 THE MATRIX PROBLEM
/* * File: HDU 3666 THE MATRIX PROBLEM * Author: xiaotian @ hnu * Created on 2010年9月30日, 下午12:28 * 题解:哈尔滨现场赛G题,看到题目想到是差分约束,但是一时没想出怎么建图 * 贺神说log下不就可以很容易的建图了,于是被点化。 * 建图还是比较裸的。直接spfa跑一下有负环就不可行,否则可行。 * 刚开始谢了一个版本TLE了,原因是 cnt[V[e]] > sqrt(1.0 *原创 2010-10-01 14:40:00 · 680 阅读 · 1 评论 -
最短路 dijkstra 数组实现
<br />最短路 dijkstra 数组实现<br />/* Dijkstra数组实现O(N^2)Dijkstra --- 数组实现(在此基础上可直接改为STL的Queue实现) g[][] --- 邻接阵,i 到 j 的初始距离dist[] --- beg到其他点的最近距离path[] --- beg为根展开的树,记录父亲结点 */#define INF 0x7ffffff#define N 1008int path[N], vis[N];int g[N][N], dis原创 2010-10-04 10:42:00 · 533 阅读 · 1 评论 -
BellmanFord 单源最短路
BellmanFord单源最短路/*BellmanFord单源最短路O(VE)| 能在一般情况下,包括存在负权边的情况下,解决单源最短路径问题| INIT: edge[E][3]为边表| CALL: bellman(src);有负环返回0;dist[i]为src到i的最短距| 可以解决差分约束系统: 需要首先构造约束图,构造不等式时>=表示求最小值, 作为最长路, dist[u] + c) { pre[v] = u; return 1; }原创 2010-10-04 11:00:00 · 238 阅读 · 0 评论 -
Timus 1450. Russian pipelines
/* * File: Timus 1450. Russian pipelines * Author: xiaotian @ hnu * Created on 2010年10月4日, 下午4:06 * 题解:DP求最长路 */#include#include#includeusing namespace std;#define N 505#define INF 0x7ffffffffLLlong long G[N][N], dp[N];bool v[N原创 2010-10-04 16:13:00 · 314 阅读 · 0 评论 -
2-sat 模板
<br />/* * File: 2-sat 模板 * Author: xiaotian @ hnu * Created on 2010年10月11日, 上午9:52 * 题解:2-sat问题求解 * 建图:将每一个点拆成 p 和 p'(编号时 p'=p+n ) * 如果 ap 和 bp 矛盾,则添加边:(ap,bp'),(bp,ap'). */#include<stdio.h>#include<iostream>#include<string.h>#incl原创 2010-10-11 13:28:00 · 1257 阅读 · 0 评论