摘要: 水水的。给几个不等式:dis[b]-dis[a]>=2; 0#include#include#include#include#define inf 1000000000#define Maxn 10110#define Maxm 160000using namespace std;int index[Maxn],dis[Maxn],vi[Maxn],e,n,Que[2000100];struct Edge{ int to,next,val;}edge[Maxm];void init(){ memset(vi,0,sizeof(vi)); memset(index,-1,siz... 阅读全文
posted @ 2013-07-18 21:44 fangguo 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 思路:班长的糖果要比snoopy的多。并且要用手写堆栈,且堆栈的大小要开到20000000.#include#include#include#include#include#define inf 1000000000#define Maxn 30110#define Maxm 160000using namespace std;int index[Maxn],dis[Maxn],vi[Maxn],e,n,Que[20000100];struct Edge{ int to,next,val;}edge[Maxm];void init(){ memset(vi,0,sizeof(vi)... 阅读全文
posted @ 2013-07-18 21:11 fangguo 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 思路:我们先求一遍floyd,将各点的最短距离求出,然后将点按si的升序排序。dp[i][k]表示第i个点在第j时间所获得的最大效益,那么dp[i][k]=max(dp[ i ][ k ] , dp[ j ][ k-p[ i ].c-dis[ i ][ j ] ]+p[ i ].s); dis[i][j]为i与j的最短路径。#include#include#include#include#include#define inf 1p[j].s) for(k=t;k>=p[i].c+dis[p[i].num][p[j].num]&&k>=0;k--) ... 阅读全文
posted @ 2013-07-18 19:44 fangguo 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 思路:设dis[i]为从0点到第i点的序列总和。那么对于A B gt k 来讲意思是dis[B+A]-dis[A]>k; 对于A B lt k来讲就是dis[B+A]-dis[A] 2 #include 3 #include 4 #include 5 #define Maxn 1100 6 #define inf 1<<30 7 using namespace std; 8 int dis[Maxn],vi[Maxn],n,index[Maxn],e; 9 struct Edge{10 int from,to,val,next;11 }edge[Maxn*1000];12 v 阅读全文
posted @ 2013-07-18 14:42 fangguo 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 思路:设dis[i]为标号为i的点到0号点的距离。对于P A B X,我们能得到等式dis[a]-dis[b]=x,那么可以化为两个不等式dis[a]-dis[b]>=x和dis[b]-dis[a]>=-x。这样就可以建两条边。V A B的话,我们知道dis[a]-dis[b]>=1,可以建一条边。这些边建起来后,图可能是一个离散的图,那么我们就定义一个超级源点连接所有的点,权值为0.进行求最长路时,只要判断是否有正圈存在,正圈的含义是绕着这个圈使每个点的dis值不断增大。用bellman-ford算法就行。还有一个笨的方法,其实是卡数据的,我们就用spfa求最长路,若循环次 阅读全文
posted @ 2013-07-18 10:20 fangguo 阅读(181) 评论(0) 推荐(0) 编辑