- 博客(182)
- 资源 (7)
- 收藏
- 关注
原创 poj 1450 水题
给你n*m的网格,求把每个点都遍历一遍最后回到起点,最短距离,直线距离为1,斜线距离为根号2.当n*m为偶数时,会发现只要走n*m长就能到达起点了。当n*m为奇数时,最后一步走个斜线才能到达起点。#includeint cas,n,m;int main(){ scanf("%d",&cas); for(int i=1;i<=cas;i++){ printf("Scenari
2012-09-23 18:49:49 555
原创 poj 2109 水题(pow函数)
pow函数 主要求a的b次方pow(a,b);double 64 15~16 (有效数字) 10^(-307) ~10^308(绝对值范围)#include#include#includeint main(){ double n,k; while(scanf("%lf%lf",&n
2012-09-22 21:32:20 454
原创 poj 1815 最小点割转化为最小边割+枚举 (邻接矩阵+递归dinic)
题意就是去掉几个点,是VS与VT不连通。并问去掉了哪几个点?。本来是最小点割的,但要转化成最小边割,就是拆点,把点变成边就行了。容量为1 。其他点相连时权值为MX。求一次最大流,若为MX,那么就证明VS与VT直接相连了,NO ANSWER!若不为MX,那么从第一个点枚举,去掉这个点,即i到i+n边容量从1边为0 。初始流量。求次最大流看看流量改没改变,若改变了,那么就说明此点是我们要找
2012-09-22 21:16:22 792
原创 zoj 2788 (dinic递归+非递归)
建图真的很重要啊!!!若A到B有门且门的开关面向A,那么A到B建边,权值为MX,B到A建边,权值为1.建一个超级源点,与有入侵者的点相连,权值为MX。非递归版#include#include#define MX 100000int cas,vs,vt,k,dist[1000],que[5000],list[1000];struct Egde{
2012-09-20 21:46:00 676
原创 zoj 2587 (最小割是否唯一+dinic非递归模版)
最大流后,从VS与VT搜索一遍,来看看是否能到达所有的点,如果不能,那么最小割不唯一。如果能,最小割唯一。#include#include#define MX 1000000int k,queue[10000],vis[1000],list1[1000],list2[1000],d[1000],vs,vt;struct Edge{ int u,v,next,p
2012-09-19 12:41:31 678
原创 poj 3308 (最大流 最小点权覆盖)
dinic递归法调了一下午最后TLE。。。二分图最小点权覆盖:从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。行为一个集合,列为一个集合。因为要乘积,所以用对数来算,就变成加法了。也就转换成求最小割。用最大流来做。#include#include#include#include#include#define MX 100000
2012-09-16 19:48:50 371
原创 poj 2250 (LCS 需打印路径)
#include#include#includeusing namespace std;int dp[110][110],k,it1[110],it2[110],it[110],path[110][110];char name[300][40],name1[110][110],str[40];int max(int a,int b){ return a>b?a:b;}void p
2012-09-16 14:22:51 419
原创 poj 1458 LCS(最长公共子序)
裸的。思想:dp[i][j]为str1中到i为止与str2中到j为止,最长子序数。若str1[i-1]==str2[j-1]那么dp[i][j]=dp[i-1][j-1]+1;否则dp[i][j]=max(dp[i-1][j],dp[i][j-1]);#include#includechar str1[1010],str2[1010];int dp[1
2012-09-12 19:56:27 438
原创 poj 3469 最小割
最小割是等于最大流的。割:将vs与vt分成两个集合的那些前向弧。最小割:容量最小的割。#include#include#define MX 10000000int n,m,numb,d[30010],queue[1000000],next[900010],list[30010];struct edge{ int u,v,flow;}eg[900000];voi
2012-09-12 17:45:57 494
原创 poj 1637 最大流(混合图欧拉回路)
。。。。对拍了好久,对出个300多个遍的bug,正在纠结要不要看的时候。。突然发现。。哪错了。。边权是1 。。但你也不能就赋1啊。。你个白痴T,T。。对于无向边,随便定向,然后看看每个点的出入度之差是不是偶数,如果有不是的那就不是欧拉图了,如果都是,那么对于之差为偶的点,改变x/2 (x为出入度之差)条边,如果是满流,那么就能变成欧拉回路。如果不是满流,就不能变成欧拉回路。建图:将
2012-09-10 21:37:53 2128
原创 poj 1087 网络流
仍是最大流。map很好用啊,自己写的change函数就TLE了,直接拿map来映射就行。。。转换器之间边权值为MX。VS到用电器之间权值为1,用电器到插头之间权值为1,提供的插座到VT之间权值为1.#include#include#include#include#define MX 100000using namespace std;int h,n1,n2,
2012-09-09 17:24:23 487
原创 poj 3436 网络流
纠结了好久的题,必须要拆点,但是有个不拆点也能A的代码。可是这组样例告诉我们必须拆点:2 410 0 0 0 110 0 0 0 010 0 1 1 110 0 1 1 1不拆点的代码:(AC了 但是是错的)点与点之间的权值为min(i,j的容量)#include#include#define MX 1000000int n,p,map
2012-09-08 20:00:43 567
原创 poj 1250 水题
。。。。某大叔说我写的代码很难看,囧了,还特意找了篇文章让我膜拜。还是个全英文的,更囧了,好吧,让我一点一点纠正我的习惯吧。#include#includechar s[1000];int ss[30],num;int main(){ while(scanf("%d%s",&num,s)&&num) { memset(ss,0,sizeof(ss)); int l
2012-09-04 15:17:30 477
原创 poj 1248 水题
同水,只要注意按字典序最大的输出就好了#include#include#includeusing namespace std;bool cmp(int a,int b){ return a>b;}int poww(int x,int y){ int xx=x; for(int i=1;i<y;i++) xx=xx*x; return xx;}char s
2012-09-04 14:57:21 765
原创 poj 1207 水题
很水,注意i j大小要自己判断#includeint num,i,j;int main(){ while (scanf("%d%d",&i,&j)!=EOF) { int max=0; int i1=i,j1=j; if(i>j) { int c=i; i=j; j=c; } for(int num1=i;num1<=j;num1++
2012-09-04 13:48:56 461
原创 poj 2112 网络流
完全不会。。看了好久别人的代码 才看懂。建图:vs=0 ve=k+c+1 从Vs到奶牛边权值为1,机器到ve权值为M。奶牛到机器权值为1.利用二分思想,从某长开始构图,把小于等于此长的边留下,再来bfs看看能不能形成增广路,能的话dfs一下返回流量,若返回的流量>=C证明此长可以,那么减小长度接着构图、bfs、dfs。#include#include#define MX 1
2012-09-04 13:09:49 459
原创 poj 1118 2606 共线
最近有点烦躁额。。感觉自己太笨了。。刷点水题吧。。1118#include#include#includeusing namespace std;double numb[1400005];int n, x[710],y[710];int main(){ while(scanf("%d",&n)&&n) { int max=0; for(int i=1;i<
2012-09-02 21:33:11 358
原创 poj 1273 网络流
裸的网络流,注意有重边就行。比如 dicuss上的一组数据,结果应为15:3 21 2 41 2 51 2 6#include#include#define MX 10000000int n,m,c[205][205],f[205][205],pre[205],mf[205],q[205];int main(){ while(scanf("%d%d"
2012-09-02 10:58:07 419
原创 poj 1149 网络流
构图很难,每个顾客为一个点,Vs与每个第一个要i猪圈的连边,权值为第i个猪圈所能提供的猪,若某个顾客比上一个顾客后到来要i猪圈的猪,那么上个顾客指向此顾客的边权值为MX,因为可以随意调动猪。最后每个顾客有条边指向Vt,权值为他想要的猪。#include#include#define MX 100000000int m,n,pn[1010],pre[1010],mf[1010],c
2012-09-01 09:29:24 341
原创 hdu 1116 欧拉回路
#include#includeint cas,n,pre[30],vst[30],in[30],out[30];struct point{ int u,v;}eg[100000];int find(int w){ int now,root=w; while(root!=pre[root]) root=pre[root]; while(pre[w]!=root) {
2012-08-28 11:59:25 2961
原创 hdu 1878 欧拉回路
判断是否存在欧拉回路,主要是还要判断图是否连通。#include#includeint point[1010],pre[1010];struct p{ int u,v;}eg[10010];int find(int root){ int now,w=root; while(pre[root]!=root) root=pre[root]; while(pre[w
2012-08-27 19:46:51 2898
原创 poj 1679 prim
判断最小生成树唯不唯一根据prim算法,找出最小的那条边及点u,然后看看已属于T集合的有没有到达点u的距离和此最小边一样长,若有而且还不是点v,那么就证明有其他最小生成树.#include#define MX 100000000int cas,n,m,pre[110],dist[110],map[110][110];int prim(int v0){ for(in
2012-08-26 19:51:08 376
原创 poj 2935 bfs
#include#include#includeusing namespace std;struct point{ bool f[4]; char s[10000]; int pos,x,y,step;}a[10][10];int sx,sy,ex,ey,step[10][10],xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};char ss[10000]
2012-08-26 15:55:17 421
原创 poj 1364 SPFA+差分约束
约束条件:如果是gt s[a-1]-s[a+b]如果是lt s[a+b]-s[a-1]此外,新加的原点与其他点的leth为零。n+1为原点。#include#include#define MX 10000000int n,m,dist[110],vst[110],list[110],f[1000000];char ss[5];bool visit
2012-08-26 14:04:12 330
原创 poj 部分 最短路题
查了查poj上的最短路的题。。。还有好多都没做啊。。哎,不做了,最近做乏了,把这写题目存起来,以后再做吧1125 1502 1511 2502 3037 3377 3615 3660
2012-08-26 12:02:01 338
原创 poj 1724 SPFA
dist数组开成二维,存的是到第i点花费j时的最小距离。#include#include#include#define MX 100000000using namespace std;int n,k,m,dist[110][10010],list[110],next[10010];bool visit[110];struct point{ int u,v,leth,c
2012-08-26 11:51:32 503
原创 poj 3159 SPFA+手写栈
一天啊 。。就挂在这道题上了。。。next数组开小了。。导致一直TLE。。服了我自己了。。T,T题意: A小朋友不希望B小朋友比他多X块糖。。SPFA+手写栈实现 队列会超时。。数据问题吧#include#define MX 100000000int pos,stack[150010],dist[30010],next[150010],list[300
2012-08-24 20:02:17 1068
原创 poj 1847 bellman-ford
本来想spfa做的。。。不知怎么的,就写了bellman了。。因为只会bellman。。T,T。。我真是水。。题意:几个点,从某点到某点需不需要转换开关的问题,求转换开关次数最小的路。一行列表,第一个是出度,第二个是不需要转换开关的那条路,接下来的几个路是需要转换开关的路。#include#include#define MX 1000000000int k,dist[110]
2012-08-23 19:15:45 412
原创 poj 2240 bellman-ford
题意: 货币转换,看一圈下来有没有货币能够升值。。。题解: 仍需要floyd来算关系。bellman来看有没有正权值回路并通过此点能够到达v0.#include#includestruct point{ int u,v; double w;}eg[1100];int cas=1,k,pos,n,m,map[50][50];double dis
2012-08-23 16:21:55 311
原创 poj 1932 bellman
我真的很水。。。代码写的丑不说。。。思想也跟不上。。。哎。。努力爬呀努力爬。。题意:she从1到n能不能走到,每个房间都有能量值,有正有负,如果能量为0或从1到n没有通路。就hopeless。否则winnable。题解:先用floyd 算出图的关系,即i 能不能到达 j。然后在bellman 若图中存在正回路并且能通过此点到达n 也是可以的。#inclu
2012-08-23 15:02:25 347
原创 poj 1860 bellman-ford
题意: 兑换货币,给你初始货币,看看你兑换完能不能比初始货币多。这真不要脸。。。有这好事我也去换了。。T,T题解: 建个点0,从点0指向初始货币。bellman负权回路反用,也就是找正权回路就行。#includestruct point{ int u,v; double w,r,c;}eg[11000];int n,m,s;double V,dist[1
2012-08-23 10:57:30 363
原创 poj 3259 bellman-ford
果然还是水啊。。险过。。差点就TLE了。。题意: n个点,正常的路是双向的,wormholes是单向的而且是负权值边。求图中有没有负权值回路。#include#define MX 10000000struct point { int in,out,w;}eg[5200];int s[1050],dist[1050],n,m,w,u,v,t;int bellman(
2012-08-22 16:54:27 278
原创 poj 1062 dijkstra
哎。。大神就是大神啊。。没有图他就建个图。。没有点他就建个点!!疯了。。我实在是太水了。。。题解: 建一个点(点0),此题即变为从0到1的最短路。点0到其他点的权值为若要直接卖点 j 所需要的花费,若通过利用 i 到达点 j ,优惠了 vi,那么点 i 到点 j 的权值就为 vi。另一个关键点:等级问题,利用枚举,把与点1有关的等级区间段一点点移动,每移动一次,求
2012-08-21 20:11:35 362
原创 poj 3268 dijkstra
题意: n个点,m条边,终点为x,问从某点到x,再回来,最大权值和为多少。题解: 正图一次从x点开始的dijkstra,再来个反图,从x点开始的dijkstra。把两个dist数组加和找最大。#include#define MX 111111111int map[1010][1010],mapcopy[1010][1010],dist1[1010],dis
2012-08-21 17:50:28 332
原创 poj 1122 dijkstra
题意: 图已经给出,-1代表无路,给你一个点,和很多个点,求很多个点到这个点的最短路,并升序输出。题解: 构造个反图,此题就变成了从一个点到很多个点的最短路。#include #include#include#define MX 1111111using namespace std;int map[30][30],n,p[30],dest,
2012-08-21 16:44:05 417
原创 poj 1797 kruskal
这题真坑爹啊。。。一直RE。。不开大不行啊。。。题意:找出1到n最大路径的一段最小路。#include#includeusing namespace std;#define MX 100000000int pre[105010];struct point{ int in,out,leth;}eg[105010];int n,m;bool cmp(po
2012-08-20 17:40:29 400
原创 poj 2387 dijkstra
题意非常简单,从n到1的最短路径。 但是要注意,输入是先输入m再输入n的。即第一行是m n。#include#define MX 1000000000int dist[2010],map[2010][2010],n,m;bool s[2010];int dijkstra(int v0){ for(int i=1;i<=n;i++) { dist[i]=map[
2012-08-20 15:01:29 302
原创 最短路 SPFA (对于bellman-ford 的优化)
SPFA算法: 既然是优化,那么肯定也不可能在图中出现负权值回路。 主要就是运用队列,如果一个点的信息被改变了,那么就把他加入队列,把队列中 点与此点相关的边 所连接的点的信息更新。直到队列为空。code:时间复杂度 O(km) k为平均每点如队列次数#include#include#includeusing na
2012-08-16 20:48:46 320
原创 最短路 Bellman-Ford 边上权值任意的单源最短路
小B算法: 怎样都好,就是不能图中包含负权值回路。。! 假如图中有n个点,那么我们需要将图遍历(因为有n-1条边)n-1次(邻接表)或n-2(邻接矩阵,因为有初始化),每次遍历的时候,拿出一个点(u),再与其他个点比较(v),如果起始点到u距离大于 起始点到v的距离加上u到v的距离,那么就更新。直到所有的点拿完,再去遍历吧。。判断存在负权值回路
2012-08-16 19:03:47 752
原创 最短路 dijkstra 权值非负的单源最短路径
小D算法: 一个图,无向有向皆可,但是一定不能有权值为负的时候!(此为前提) 从起点出发,找最小的边并且另一点未被标记,然后把这点标记了,再通过此点更新其他的点的信息。 直到最后所有的点都被标记了。OVER~*逆用: 多点到某一点:即储存个反图,转换为一点到多点就可以利用dijkstra求解。
2012-08-16 18:18:23 1006
xgboost编译后.rar
2016-05-12
hadoop+HA+zookeeper+hbase配置文件
2015-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人