- 博客(24)
- 资源 (1)
- 收藏
- 关注
原创 hdu1224
题意:求一幅图中从1再回到1的过程中,经过的点最大的路径。#include #include #include using namespace std;int mapp[120][120],point[120];int step[220],ans[220];int main(){ int t,m,n,i,j,max,k,a,b,cas=0; scanf("%d
2012-08-28 21:10:05 292
原创 hdu4263 Kruscal
就是求是否存在有k条蓝边的生成树。分别求蓝边尽量多和蓝边尽量少的情况,如果在这之间,就存在。否则,不存在。比赛的时候想对了,关键是输入超时了,用的cin,主要是不能用%c。。。#include #include #include using namespace std;const int mm=25000;const int mn=2500000;struct Edge{
2012-08-27 21:31:40 395
原创 nefu499最小费用最大流
#include#include#includeusing namespace std;const int oo=1e9;const int mm=88888;const int mn=444;int node,src,dest,edge;int ver[mm],cost[mm],flow[mm],next[mm];int head[mn],dis[mn],q[mn],p[mn]
2012-08-27 19:03:16 268
原创 hdu1217Floyd最短路
题意:有n个国家,每两个国家之间都有一定的汇率,问怎么样转换才能赚钱。以国家为顶点,汇率为边长,构造一个图,如果从自身出发回到自身的路径乘积和大于1,则说明可以赚钱。#include #include #include #include using namespace std;char ch[40],sh[40];double dis[55][55];void Floyd(i
2012-08-24 16:41:28 402
原创 hdu1385Floyd 记忆路径
题意:求从i到j的最短路径长度,以及字典序最小的路径。#include #include using namespace std;int a[110][110],c[110][110];int b[110];int find(int from,int to){ while(c[from][to]!=to) { printf("-->%d",c[fro
2012-08-24 15:06:00 275
原创 hdu1142spfa+记忆化搜索
题意:起点是1,终点是2,只能从离终点远的点走到离终点近的点,问从起点到终点一共有多少种走法。分析:利用spfa求得以2为起点所有点的距离,然后利用记忆化搜索求得路径的个数。#include #include #include using namespace std;const int oo=1e9;const int mm=5000;const int mn=510000;
2012-08-24 13:58:25 366
原创 hdu4396 spfa有限制的最短路
利用二维的spfa#include #include using namespace std;const int oo=1e9;const int mm=5555;const int mn=200020;int ver[mn],next[mn],cost[mn];int head[mm],qx[mn],qy[mn],dis[mm][55];bool vis[mm][55];i
2012-08-24 10:36:09 2981
原创 hdu4377
找规律的题目,在比赛的时候想到把数据倒过来了,但是没有想到sqrt(n)....#include #include #include #include using namespace std;int a[100010];int main(){ int t,n,i,tmp,q,p,tmp1,tmp2,j; scanf("%d",&t); while(t--)
2012-08-20 20:58:08 389
原创 hdu4370 0 or 1 最短路
Problem DescriptionGiven a n*n matrix Cij (1ij (1Besides,Xij meets the following conditions:1.X12+X13+...X1n=12.X1n+X2n+...Xn-1n=13.for each i (1ki (1ij (1For example, if n=4,we ca
2012-08-20 16:12:30 329
原创 星际转移问题
分析(引用BYvoid 大牛的分析):分层图网络流问题,枚举答案,构造网络流判定。建模方法:首先判断从地球到月球是否存在一条路线,如果不存在那么无解,否则把每个太空站按照每天拆分成d 个点,表示第i个站第d 天。建立附加源S 汇T,顺序枚举答案Day。1、对于第Day 天,从S 到连接一条容量为无穷大的有向边。2、从到T 连接一条容量为无穷大的有向边。3、对于第i 个太
2012-08-18 16:54:46 533
原创 hdu4364 模拟矩阵相乘
这个题就是题意不好理解。。。 题意:给定一个矩阵T=输入数据中所给的矩阵为s,求T*s 但是在矩阵相乘时 乘以1 数据不变;乘以2 左移一位;乘以3左移一位再异或移位之前的矩阵;另外加法运算定义为异或运算。注意:在移位过程中如果大于0xff,则需再异或0x1b。#include #include #include using namespace std;int Matrix
2012-08-15 20:54:07 410
原创 有向无环图的最小路径覆盖nefu481
有向无环图的路径覆盖问题就是在图中找一些不相交的简单路径,使之覆盖图中的所有顶点,且任何一个顶点有且只有一条路径与之关联(如果沿这些路径中的每条路径从起点到终点,那么恰好可以经过图中每个顶点一次且仅一次)。从上述定义中可以看到:(1)每个单独的顶点都可以是一条路径。(2)如果存在路径(p1,p2,,,,pk),那么在覆盖图中,顶点p1,p2,,,,pk,不再与其他的顶点之间存在有向边。
2012-08-15 16:01:00 497
原创 nefu473最大流模板简单应用
#include #include using namespace std;const int oo=1e9;const int mm=111111;const int mn=999;int node,src,dest,edge;int ver[mm],flow[mm],next[mm];int head[mn],work[mn],dis[mn],q[mn];void prepa
2012-08-15 15:14:58 266
原创 最大流模板
const int oo=1e9;const int mm=111111;const int mn=999;int node,src,dest,edge;int ver[mm],flow[mm],next[mm];int head[mn],work[mn],dis[mn],q[mn];void prepare(int _node,int _src,int _dest)//初始化{
2012-08-15 15:13:30 245
原创 hdu4360 spfa
题意:有一个网络,每条边分别被标记上‘L’、‘O’、‘V’、‘E’四个字母,从起点到终点,只能按照LOVELOVE.....的走。求在保证LOVE的情况下的最短路。利用spfa,将每条路标记上四个状态,求最短路即可。#include #include #include using namespace std;const int mm=5555;const int mn=99999
2012-08-15 15:06:41 238
原创 poj1679次小生成树
题意:最小生成树是否唯一。思路:求得次小生成树,如果与最小生成树相等,则不唯一。求次小生成树的过程:求得最小生成树,依次去掉最小生成树中的边,求的值中的最小值即为次小生成树。次小生成树可能与最小生成树相等。。。#include #include #include #include using namespace std;const int maxn=105;const
2012-08-13 18:57:19 233
原创 poj2907DFS
题意:在一个最大20*20的矩形中,有一个起点,和另外许多个点,求从这个点出发经过所有点,再回到起点最少经过多少步。因为只能上下左右地走,所以用到搜索。#include #include #include using namespace std;struct Node{ int x,y,flag;}node[100];int n,sx,sy;int ans,ret;v
2012-08-13 15:56:22 248
原创 poj2438构造哈密顿图
由于本题是Special Judge,表明只要输出一种答案即可。哈密顿模板题。#include #include #include using namespace std;const int maxn=1000;int ans[maxn];bool mapp[maxn][maxn];bool visit[maxn];void reverse(int s,int t){
2012-08-13 14:47:36 456
原创 poj2230欧拉回路+DFS
题意:遍历所有的边至少一次,所有点两次Dfs所有的边,回溯#include #include #include using namespace std;int vis[10000];struct Edge{ int to,next;};Edge edge[100100];int head[10010];int n,m,top;void Dfs(int v){
2012-08-12 15:52:04 3695
原创 poj1041
#include #include #include using namespace std;int degree[50];int flag[2000];int s[2000];int e[2000][2];int numv,nume,top;int check(){ for(int i=1;i<=numv;i++) if(degree[i]%2!=0)
2012-08-10 20:08:41 327
原创 poj1386判欧拉路
欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。 判断欧拉路是否存在的方法有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。判断欧拉回
2012-08-10 15:30:10 4406
原创 hdu4325线段树+离散化
首先将所有点进行离散化,然后利用线段树求解。#include #include #include using namespace std;const int maxn=500100;struct Node{ int l,r,c; int add;}tree[maxn*4];int X[maxn*4];int tmp[maxn];int set[maxn][2
2012-08-05 16:16:52 279
原创 upper_bound\lower_bound的用法
#include #include //必须包含的头文件using namespace std;int main(){ int point[10] = {1,3,7,7,9}; int tmp = upper_bound(point, point + 5, 7) - point;//按从小到大,7最多能插入数组point的哪个位置 printf("%d\n",tmp); tmp = l
2012-08-05 16:15:36 295
原创 hdu4334
题意:有5个集合,从这5个集合中各取1个元素,使之和为0,如果存在输出Yes,否则输出No。假设现在有两个有序序列,有两个指针,一个指向第一个序列的最大值,另一个指向第二个有序序列的最小值,将两个指针所指的值相加,如果小于固定值x,则第二个指针向值更大的方向移动,否则反之。而这个题是5个集合,可以将1,2看作一组,将3,4看作一组,进行计算。具体的代码如下。#include #i
2012-08-03 16:12:00 317
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人