
图论
文章平均质量分 59
plusplus7
萌系大学生一枚。。。。
展开
-
POJ 1129 Channel Allocation
题意很好理解,给你一个图,让你给每一个点着色,使得相邻两个点的颜色不一样。很容易想到四色定理, 四色定理 它指出,如果将平面分成一些邻接的区域,那么可以用不多于四种颜色来给这些区域染色,使得每两个邻接区域染的颜色都不一样。 于是,我们给4个颜色编号,从1开始尝试给每一个点染色,如果满足,就继续下一个点;如果不满足,就用下一个颜色尝试,直到染色成功为止。而点只有26个。。于是原创 2012-11-26 15:50:14 · 397 阅读 · 0 评论 -
BNUOJ 4138 Dizzy Cows
给一个有向图,之后,在给一些无向边,问怎么把这些边放进有向图中能不出现环。 解法相当简单,直接拓扑排序就行了,按照拓扑序的顺序加边,必然不会出现环。 #include #include #include #include using namespace std; vector v[110000]; int in[110000],topno[110000]; int mai原创 2013-01-09 11:04:55 · 406 阅读 · 0 评论 -
POJ 2387 Til the Cows Come Home
农夫囧的头号后宫母牛背时迷路了。给定一张无向图,背时在标号为n的节点。问背时回标号1的节点的最短路有多长。 最短路,用dijkstra的话会比较麻烦,因为这题可能有重边。所以就要用到传说中号称快速求最短路的SPFA算法。 诶。。其实是第一次写spfa,把模板放在这里,以后方便复习。。 #include #include #include #include #include usin原创 2013-01-13 11:18:04 · 468 阅读 · 0 评论 -
POJ 1274 The Perfect Stall
有n头牛与m个牛棚,给出每头牛愿意去产奶的牛棚编号,每头牛只可产一次奶,每个牛棚也只允许一只牛产奶。 二分匹配,模板题,匈牙利算法。 #include #include #include #include using namespace std; int mp[210][210]; bool ck[210],v[210]; int p[210]; int n,m; int find原创 2013-01-13 11:02:34 · 410 阅读 · 0 评论 -
BNUOJ 4157 Chocolate Giving
求最短路。 给定一个无向图,后给出一些顶点对,求+的最小值。 用spfa求一次最短路就可以了。 #include #include #include #include #include using namespace std; struct edge { int u; int v; int w; }; edge e[1002000];原创 2013-01-29 20:00:09 · 517 阅读 · 0 评论 -
BNUOJ 1392 Drainage Ditches
和前面那个POJ 1273是一样的,这里用的是Dinic算法,所以当做一个模板保存一下。 #include #include #include #include #define INF 0x7fffffff using namespace std; int val[300][300]; int lev[300]; int n,m; bool bfs() { int u,v;原创 2013-03-07 22:38:20 · 698 阅读 · 0 评论 -
POJ 3281 Dining
题意是有F种食物,D种饮料,N个人,每个人决定吃或喝,现在让你去分配,使得吃喝都得到的人最多(占便宜)。每种吃喝的东西只能招待一头牛 最大流的题,建图是关键。源点与每个食物连一条容量为1的边,汇点与每个饮料连一条容量为1的边。牛要拆点,入点与对应的食物连容量为1的边,出点和对应的饮料连一条容量为1的边。 用的dinic算法。 #include #include #include原创 2013-03-07 22:42:37 · 689 阅读 · 0 评论 -
POJ 2165 Going Home
题意:给定一个地图(n*m),地图上有若干个man和house( 最小费用最大流的模板题。 (但是也可以看做是求二分图的带权匹配问题,用KM算法解决,这里先贴最小费用最大流的代码) #include #include #include #include #define INF 0x7fffffff using namespace std; struct point {原创 2013-03-08 17:17:52 · 661 阅读 · 0 评论 -
POJ 2516 Minimum Cost
n个店主,m个经销商,k个商品。不同经销商可以提供不同数量的商品,不同店主需求不同数量的商品,不同的商品从不同的店主手中发货给不同的店主需要花费不同的价钱。 题目输入格式是这样的: 第一行n m k 接下来是一个n*k的矩阵,表示不同店主需求不同数量的商品; 然后是一个m*k的矩阵,表示不同经销商可以提供不同数量的商品;原创 2013-03-08 17:14:46 · 637 阅读 · 0 评论 -
POJ 3180 The Cow Porm
这题目实在是很让人无语,FJ真是一个清新可爱的男孩子。。 比赛完了查题解才发现是给定一个有向图,求强连通分量。 Tarjan算法 #include #include #include #include using namespace std; vector g[10010]; int dfn[10010],low[10010],tag; int stack[10010],s_top;原创 2012-11-29 19:11:17 · 2816 阅读 · 0 评论 -
POJ 2942 Knights of the Round Table
双连通分量Tarjan+交叉染色 #include #include #include using namespace std; struct edge { int u; int v; }; int n; int g[1010][1010]; int tg[1010][1010],lt[1010]; bool flag[1010]; int dfn[1010],low[10原创 2013-03-13 18:07:50 · 570 阅读 · 0 评论 -
POJ 1201 Intervals
差分约束系统。 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi 求解差分约束系统,可以转化成图论的单源最短路径问题。观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v] 原点(s,s)与所有定点相连,边权均为0。对这个图以s为原点运行Bellman-ford算法(或SPFA算法),最终{d[i]}即为一组可行解。 #include #inc原创 2013-03-01 17:28:38 · 551 阅读 · 0 评论 -
POJ 3164 Command Network
朱刘算法模板题 #include #include #include #include #define eps 1e-8 #define INF 0x7fffffff using namespace std; struct point { double x; double y; }; struct edge { int u; int v; doub原创 2013-03-31 20:51:01 · 1176 阅读 · 0 评论 -
POJ 1236 Network of Schools
强连通分量 问题一,缩点后,求出所有入度为0的点的个数; 问题二,缩点后,求出入度为0的点的个数和出度为0的点的个数中的最大值 #include #include #include #include #include using namespace std; vector g[120]; int tg[120]; int dfn[120]; int low[原创 2013-03-19 15:19:36 · 1141 阅读 · 0 评论 -
POJ 3308 Paratroopers
最大流最小割模型。 把问题转化成最小点权覆盖问题,就能用最小割求解。而最小割又和最大流是对偶问题,所以此题用dinic可解。 #include #include #include #include #include #define INF 1000007 #define eps 1e-8 using namespace std; int sta,end; double val[200]原创 2013-03-27 00:24:52 · 894 阅读 · 0 评论 -
POJ 1325 Machine Schedule
建图+Dinic=Accept #include #include #include #include using namespace std; int sta,end; int val[300][300]; int tag[300]; int min(int a,int b) { return a>b?b:a; } int bfs() { int u,v; qu原创 2013-03-27 00:33:14 · 842 阅读 · 0 评论 -
LA 3211 Now or later
训练指南 P325 例题 2-SAT问题+二分。 题目的数据范围小,所以用朴素的算法解2-SAT能过。 tarjan的SCC算法判2-SAT #include #include #include #include #define MAXN 2200 #define MAXN_2 4400 using namespace std; int min(int a,int b) {原创 2013-04-11 17:34:28 · 1124 阅读 · 0 评论 -
POJ 1275 Drainage Ditches
最大流模板题,用EK算法。 #include #include #include #include using namespace std; #define INF 9999999 int map[260][260],flow[260][260]; int EdmondsKarp(int sta,int tar) { int cnt,t,i,f[260],pr[260];原创 2013-01-08 10:56:00 · 375 阅读 · 0 评论 -
BNUOJ 4139 Cow Toll Paths
给定一个无向图,求两点之间的最短距离。这里的两点距离是指两点之间的路径权之和加上包括两点在内的所有经过的点中,点权最大点的点权。 解法是floyd,但是需要变化一下。 #include #include #include #include using namespace std; struct T { int n; int v; }; T p[260]; int g[2原创 2013-01-08 00:53:47 · 638 阅读 · 0 评论 -
POJ 2567 Code the Tree
题目描述有点坑,看懂了就好。 主要就是一个建图的过程比较麻烦,建好了就好作了。 中文翻译地址:http://www.bnuoj.com/bnuoj/problem_show.php?pid=1009 #include #include #include #include #include using namespace std; int now,n; int g[60][60],i原创 2013-01-07 22:00:59 · 803 阅读 · 0 评论 -
POJ 1062 昂贵的聘礼
这个题先建图,用最短路+枚举可以搞定 我本来想要图个方便,用floyd。。但是在枚举等级区间的时候,和floyd的三重for,出了不少问题。。。wa很多次,以后用floyd的时候要注意一下。 #include #include #include using namespace std; int map[200][200],dist[200][200]; int pov[200]原创 2012-11-15 01:53:12 · 347 阅读 · 0 评论 -
POJ 1125 Stockbroker
Floyd水过。。。 问题转化成求有向图中一点,使得该点能够到其他所有顶点,并且使得到其他点的每条最短路径的最大长度最小。 #include #include #include #include #define maxn 99999999 using namespace std; int main() { int n,i,j,k,map[120][120],dist[120][原创 2012-11-15 13:49:15 · 317 阅读 · 0 评论 -
POJ 1860 Currency Exchange
第一次写Bellman-Ford,改了好几次居然AC了额。。 思路很简单,用BF判断有木有正环~ /** Bellman-Ford */ #include #include #include using namespace std; int n,m,s,t1,t2; double r[120][120],c[120][120],v,t3,t4,t5,t6,dist[120]; b原创 2012-11-14 23:04:42 · 362 阅读 · 0 评论 -
POJ 2240 Arbitrage
Bellman-Ford 找环 很久以前看见这题不敢动。。今天终于把它A了:-) #include #include #include #include using namespace std; map mp; struct Edge { int s; int e; double v; }; Edge e[300000]; double dist[1000];原创 2012-11-15 14:11:55 · 345 阅读 · 0 评论 -
POJ 2253 Frogger
Floyd或者Dijkstra水之。。 #include #include #include using namespace std; double min(double a,double b) { return a>b?b:a; } double max(double a,double b) { return a<b?b:a; } double distance(doub原创 2012-11-15 13:05:18 · 337 阅读 · 0 评论 -
POJ 3259 Wormholes
Wormholes,which is one of my favorite topic! 这题题意我很喜欢~实际上,就是给你一个图,又双向边,又单向边,然后问有无负权环。 Bellman-Ford水之~第二道背而满腹的.. #include #include using namespace std; struct Edge { int s; int e;原创 2012-11-15 00:13:38 · 353 阅读 · 0 评论 -
POJ 1258 Agri-Net
Prime模板题。。 #include #include #include #include #define MAX 600 using namespace std; const int INF=1000000000; int g[MAX][MAX]; int minD[MAX]; int mark[MAX]; int mst(int n) { int ans=0; m原创 2012-11-15 15:41:03 · 415 阅读 · 0 评论 -
POJ 1094 Sorting It All Out
这题的代码是我写过的最丑陋的代码,没有之一。。 基本上每个trick都被我遇到了。拓扑排序也快忘得差不多了。 题意:给出一些关系,判断关系之间的是否矛盾,在哪里开始的,若不矛盾,判断能否理清各个变量间的优先级排列,若能理清,在哪里开始能理清的,并输出优先级排列(从低到高)。 #include #include #include #include using namespace原创 2012-11-16 01:15:34 · 353 阅读 · 0 评论 -
POJ 2485 Highways
给定一个图,求最小生成树的最长边 改改模板就可以AC #include #include #include #include #define MAX 600 using namespace std; const int INF=1000000000; int g[MAX][MAX]; int minD[MAX]; int mark[MAX]; int mst(int n) {原创 2012-11-15 15:30:52 · 341 阅读 · 0 评论 -
POJ 1789 Truck History
最小生成树,稠密图,用Dijkstra算法AC是妥妥的。。 Kruscal过的。。g++会TLE C++可以AC,, #include #include #include #include #include #define MAX 2100 using namespace std; struct EDGE { int f,e; int w; }edge[MAX*MAX原创 2012-11-15 15:06:54 · 326 阅读 · 0 评论 -
POJ 3041 Asteroids
把原图按行和列,建成一个二分图,求最少点覆盖。 解法:用匈牙利算法求最大匹配,最大匹配数=最少点覆盖数 #include #include #include using namespace std; int n,k; int map[510][510]; int p[510]; bool v[510]; bool find(int d) { int i; for (i=1原创 2012-11-16 10:49:52 · 351 阅读 · 0 评论 -
POJ 3020 Antenna Placement
将每一个*编号,然后建二分图,注意边是双向的。 于是,问题就转化为求最小路径覆盖。 由公式:最小路径 = 顶点的数量 - 最大匹配 。 有向无环图的最小路径覆盖(数)=二分图的最小边覆盖集(数)=二分图的最大独立集(数)=全集-二分图的最小点覆盖集(数)=全集-二分图的最大匹配数 PS:此题的边是双向的,所以匹配数会多一倍,于是要ans/2才是真正的匹配数。 单独的顶点是原创 2012-11-16 11:54:30 · 415 阅读 · 0 评论 -
POJ 2513 Colored Sticks
给你250000个棒子,棒子两头有颜色,问你可不可以用完所有的棒子,把棒子连起来,并且使得棒子相连的两头颜色一样。 其实就是求欧拉回路。 有无向图存在欧拉路的充要条件为: 1->图是连通的; 2->所有节点的度为偶数,或者有且只有两个度为奇数的节点。 判断图的连通性,用并查集搞定。又题目给的棒子颜色是字符串,所以要用trie树把每个颜色的编号记录下来。 注意,这里用map会原创 2012-11-21 17:20:57 · 433 阅读 · 0 评论 -
POJ 3126 Prime Path
10000-1000内的素数就只有那么多啊,BFS很快就能得出解 #include #include #include #include #include using namespace std; bool isPrime(int n) { int i; for(i=2;i<=sqrt((double)n);i++) { if(n%i==0)原创 2012-11-23 23:39:17 · 448 阅读 · 0 评论 -
POJ 2031 Building a Space Station
这题应该算最小生成树吧,怎么分类到几何了咧。。 给n个球的球心和半径,用长度最少的线,把这些球的表面连接起来。如果球相交,线的距离算成是0就行了。 #include #include #include #include #include using namespace std; struct T { double x; double y; double z;原创 2012-12-31 00:49:42 · 385 阅读 · 0 评论 -
POJ 2421 Constructing Roads
最小生成树,用Kruskal。 #include #include #include #include using namespace std; struct edge { int u; int v; int w; }; edge e[10000]; int le,n,uset[110]; int root(int x) {原创 2013-01-01 15:14:34 · 395 阅读 · 0 评论 -
【博客搬家】本博客已全面停止更新,新博客地址 plusplus7.com
新博客地址:http://www.plusplus7.com原创 2013-11-23 21:24:40 · 1414 阅读 · 0 评论