kuangbin 最短路集合
Til the Cows Come Home poj-2387
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<vector>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
#define PI acos(-1.0)
#define _e exp(1.0)
#define ll long long
const int maxn=1e3+; int cost[maxn][maxn];
int d[maxn];
bool used[maxn];
int n; void dijkstra(int s)
{
fill(d,d+n,INF);
fill(used,used+n,false);
d[s]=;
while(true)
{
int v=-;
for(int u=;u<=n;u++)
{
if(!used[u] && (v==- || d[u]<d[v]))
v=u;
}
if(v==-)
break;
used[v]=true;
for(int u=;u<=n;u++)
d[u]=min(d[u],d[v]+cost[v][u]);
}
}
int main()
{
int T;
scanf("%d%d",&T,&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cost[i][j]=INF;
for(int i=;i<T;i++)
{
int u,v,len;
scanf("%d%d%d",&u,&v,&len);
{
if(len<cost[u][v])
{
cost[u][v]=len;
cost[v][u]=len;
}
}
}
dijkstra(n);
cout<<d[]<<endl;
}
Frogger poj-2253
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<set>
#include<vector>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-10
#define PI acos(-1.0)
#define _e exp(1.0)
#define ll long long
const int maxn=;
int x[maxn],y[maxn],n;
double map[maxn][maxn]; void floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
map[i][j]=min(map[i][j],max(map[i][k],map[k][j]));
}
int main()
{
int ca=;
while(~scanf("%d",&n) && n)
{
memset(map,,sizeof(map));
for(int i=;i<=n;i++)
{
scanf("%d %d",&x[i],&y[i]);
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
map[i][j]=map[j][i]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j]));
floyd();
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",ca++,map[][]); }
return ;
}
Heavy Transportation poj-1797
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn=; int map[maxn][maxn];
int n,m; int dijkstra()
{
int vis[maxn],d[maxn];
int v;
for(int i=;i<=n;i++)
{
vis[i]=;
d[i]=map[][i]; //d[]是最大承载量
}
for(int i=;i<=n;i++)
{
int f=-;
for(int j=;j<=n;j++)
if(!vis[j] && d[j]>f)
{
f=d[j];
v=j;
}
vis[v]=;
for(int j=;j<=n;j++)
{
if(!vis[j] && d[j]<min(d[v],map[v][j]))
d[j]=min(d[v],map[v][j]);
}
}
return d[n];
}
int main()
{
int t;
scanf("%d",&t);
int ca=;
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
map[i][j]=;
for(int i=;i<m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
printf("Scenario #%d:\n",ca++);
printf("%d\n\n",dijkstra());
}
}
Silver Cow Party poj-3268
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 1e3 + ; int cost[maxn][maxn];
bool used[maxn];
int d[maxn];
int ans[maxn];
int n, m, x; void dijkstra(int s)
{
memset(d, INF, sizeof d);
memset(used, false, sizeof used);
d[s] = ;
while (true)
{
int v = -;
for (int u = ; u <= n; u++)
if (!used[u] && (v == - || d[u] < d[v]))
v = u;
if (v == -)
break;
used[v] = true;
for (int u = ; u <= n; u++)
d[u] = min(d[u], d[v] + cost[v][u]);
}
} int main()
{
ios::sync_with_stdio(false);
cin >> n >> m >> x;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
cost[i][j] = INF;
for (int i = ; i < m; i++)
{
int a, b, l;
cin >> a >> b >> l;
cost[a][b] = l;
}
dijkstra(x);
for (int i = ; i <= n; i++)
{
ans[i] = d[i];
// cout << d[i] << endl;
} for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
if (i >= j)
swap(cost[i][j], cost[j][i]);
dijkstra(x);
int maxx = ;
for (int i = ; i <= n; i++)
maxx = max(ans[i] + d[i],maxx);
cout << maxx << endl;
}
Currency Exchange poj-1860
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
#define ll long long const int maxn=1e2+; int n,m,s;
double v;
double g1[maxn][maxn]={},g2[maxn][maxn]={}; //g1:a->b汇率 g2:a->b佣金
double map[maxn]={}; //在某一兑换点的金钱的数额 int floyd()
{
double d[maxn];
for(int i=;i<=n;i++)
d[i]=map[i];
for(int k=;k<=n;k++) {
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
if ((map[i] - g2[i][j]) * g1[i][j] > map[j]) {
map[j] = (map[i] - g2[i][j]) * g1[i][j];
}
}
}
}
for(int i=;i<=n;i++)
if(d[i]<map[i]) {
return ;
}
return ;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(); cout.tie();
cin>>n>>m>>s>>v; //n:货币的总数,m:兑换点的数目,s:手上钱的类型 v:手上钱的数目
for(int i=;i<=m;i++)
{
int a,b;
double c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
g1[a][b]=c;
g2[a][b]=d;
g1[b][a]=e;
g2[b][a]=f;
}
map[s]=v;
floyd();
if(floyd())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
Wormholes poj-3259
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 1e5 + ; int map[][],n,m,k,num=; void Init()
{
memset(map,INF,sizeof map);
} int floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
int t = map[i][k]+map[k][j];
if(map[i][j] > t)
map[i][j]=t;
}
if(map[i][i]<)
return ;
}
return ;
}
int main()
{
ios::sync_with_stdio(false);cin.tie();cout.tie(); int t;
cin>>t;
while(t--)
{
Init();
cin>>n>>m>>k;
for(int i=;i<=n;i++)
map[i][i]=;
for(int i=;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(c<map[a][b])
map[a][b]=map[b][a]=c;
}
for(int i=;i<=k;i++)
{
int a,b,c;
cin>>a>>b>>c;
map[a][b]=-c;
}
if(floyd())
puts("YES");
else
puts("NO");
} }
MPI Maelstrom poj-1502
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 1e5 + ;
int dis[];
bool vis[];
int map[][],n,m,k,num=;
void Init()
{
memset(map,INF,sizeof map);
for(int i=;i<=n;i++)
map[i][i]=;
}
void Dijkstra(int start)
{
for(int i=;i<=n;i++)
{
dis[i]=INF;vis[i]=false;
}
dis[start]=;
for(int j=;j<=n;j++)
{
int k=-;
int Min=INF;
for(int i=;i<=n;i++)
if(!vis[i] && dis[i]<Min)
{
Min=dis[i];
k=i;
}
if(k==-)
break;
vis[k]=true;
for(int i=;i<=n;i++)
if(!vis[i] && dis[k]+map[k][i]<dis[i])
{
dis[i]=dis[k]+map[k][i];
}
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie();cout.tie(); cin>>n;
Init();
for(int i=;i<=n;i++)
for(int j=;j<i;j++)
{
char str[];
cin>>str;
if(str[]!='x')
map[i][j]=map[j][i]=atoi(str);
}
Dijkstra();
int sum=;
for(int i=;i<=n;i++)
sum=max(sum,dis[i]);
cout<<sum<<endl; }
Extended Traffic Lightoj-1074
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h> using namespace std; const int MaxN=;
const int MaxM=MaxN*MaxN;
const int INF=10e8; struct Edge
{
int to,next,cost;
}; Edge E[MaxM];
int head[MaxN],Ecou;
bool vis[MaxN];
int couNode[MaxN];
bool cir[MaxN]; void init(int N)
{
Ecou=; for(int i=;i<=N;++i)
head[i]=-,vis[i]=,cir[i]=;
} void addEdge(int u,int v,int c)
{
E[Ecou].to=v;
E[Ecou].cost=c;
E[Ecou].next=head[u];
head[u]=Ecou++;
} void dfs(int u)
{
cir[u]=; for(int i=head[u];i!=-;i=E[i].next)
if(!cir[E[i].to])
dfs(E[i].to);
} bool SPFA(int lowcost[],int N,int start)
{
queue <int> que;
int u,v,c; for(int i=;i<=N;++i)
lowcost[i]=INF,couNode[i]=;
lowcost[start]=; que.push(start);
vis[start]=;
couNode[start]=; while(!que.empty())
{
u=que.front();
que.pop(); vis[u]=; // !!! for(int i=head[u];i!=-;i=E[i].next)
{
v=E[i].to;
c=E[i].cost; if(cir[v])
continue; if(lowcost[v]>lowcost[u]+c)
{
lowcost[v]=lowcost[u]+c; if(!vis[v])
{
vis[v]=;
que.push(v); ++couNode[v]; if(couNode[v]>N)
dfs(v);
}
}
}
} return ;
} int ans[MaxN];
int val[MaxN]; inline int cube(int x)
{
return x*x*x;
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); int T;
int N,Q,M;
int a,b;
int cas=; scanf("%d",&T); while(T--)
{
scanf("%d",&N);
init(N); for(int i=;i<=N;++i)
scanf("%d",&val[i]); scanf("%d",&M);
while(M--)
{
scanf("%d %d",&a,&b);
addEdge(a,b,cube(val[b]-val[a]));
} SPFA(ans,N,); scanf("%d",&Q); printf("Case %d:\n",cas++); while(Q--)
{
scanf("%d",&a); if(cir[a] || ans[a]< || ans[a]==INF)
printf("?\n");
else
printf("%d\n",ans[a]);
}
} return ;
}
Cow Contest poj-3660
分析:floyd闭包,看每一头牛是否确定了赢的和输的加起来是n-1,是的话名次就确定了。(vj上g++rt了,c++就ac了)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include<map>
#include<cmath> using namespace std;
#define ll long long const int maxn=1e6+;
const int INF = 0x3f3f3f3f; int n,m;
int vis[][]; void Init()
{
memset(vis,,sizeof vis);
} void floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(vis[i][k]== && vis[k][j]==)
vis[i][j]=;
}
}
int main()
{
ios::sync_with_stdio(false);
while(~scanf("%d%d",&n,&m))
{
Init();
for(int i=;i<=m;i++)
{
int a,b;
cin>>a>>b;
vis[a][b]=;
}
floyd();
int ans=;
for(int i=;i<=n;i++)
{
int du=;
for(int j=;j<=n;j++)
{
if(vis[i][j]== || vis[j][i]==)
du++;
}
if(du==n-)
ans++; }
cout<<ans<<endl;
}
}
Arbitrage poj-2240
分析:map存储字符串对应的编号
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<map>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 1e5 + ;
int n;
double mp[][];
map<string,int>p;
void floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(mp[i][j]<mp[i][k]*mp[k][j])
mp[i][j]=mp[i][k]*mp[k][j];
return;
}
int main()
{
ios::sync_with_stdio(false);cin.tie();cout.tie();
int ca=;
while(~scanf("%d%*c",&n) && n)
{
p.clear();
for(int i=;i<=n;i++)
{
char str[];
scanf("%s",str);
p[str]=i;
mp[i][i]=;
}
int m;
scanf("%d%*c",&m);
for(int i=;i<=m;i++)
{
double a;
char str1[],str2[];
scanf("%s%lf%s",str1,&a,str2);
mp[p[str1]][p[str2]]=a;
}
floyd();
bool flag=false;
for(int i=;i<=n;i++)
{
if(mp[i][i]>)
{
flag=true;
break;
}
}
if(flag)
printf("Case %d: Yes\n",ca++);
else
printf("Case %d: No\n",ca++); }
}
Invitation Cards poj-1511
分析:邻接表存储路径,正反向spfa,用vector寸可能会超时
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include<map>
#include <queue>
#include<vector>
#include<cmath> using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6+; struct edge
{
int to,w,nxt;
};
edge e[MAXN];
int n,cnt,head[MAXN],a1[MAXN],a2[MAXN],c[MAXN];
ll dis[MAXN]; void addedge(int u,int v,int w)
{
e[cnt].to=v;
e[cnt].w=w;
e[cnt].nxt=head[u];
head[u]=cnt++;
} ll spfa()
{
fill(dis,dis+MAXN,INF);
queue<int>que;
que.push();
dis[]=;
while(!que.empty())
{
int u=que.front();
que.pop();
for(int i=head[u];i!=-;i=e[i].nxt){
if(dis[e[i].to]>dis[u]+e[i].w){
dis[e[i].to]=dis[u]+e[i].w;
que.push(e[i].to);
}
}
}
ll res=;
for(int i=;i<=n;i++)
res+=dis[i];
return res; }
int main()
{
ios::sync_with_stdio(false);cin.tie();cout.tie();
int t;
scanf("%d",&t);
while(t--)
{
int m;
scanf("%d%d",&n,&m);
cnt=;
fill(head,head+MAXN,-);
for(int i=;i<m;i++)
{
scanf("%d%d%d",&a1[i],&a2[i],&c[i]);
addedge(a1[i],a2[i],c[i]);
}
ll ans=spfa();
cnt=;
fill(head,head+MAXN,-);
for(int i=;i<m;i++){
addedge(a2[i],a1[i],c[i]);
}
ans+=spfa();
printf("%lld\n",ans);
} }
Candies poj-3159
分析:还是用邻接表存的路径,spfa用queue会超时,用vector也会超时,用栈的思想可以过,Dijkstra+优先队列也超时。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include<map>
#include <queue>
#include<vector>
#include<cmath> using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f;
const int MAXN = 1e6+; struct edge
{
int to,w,nxt;
};
edge e[MAXN];
int n,cnt,head[MAXN];
bool vis[MAXN];
ll dis[MAXN]; void addedge(int u,int v,int w)
{
e[cnt].to=v;
e[cnt].w=w;
e[cnt].nxt=head[u];
head[u]=cnt++;
} ll spfa()
{
fill(dis,dis+MAXN,INF);
int sta[MAXN];
memset(vis,false,sizeof vis);
queue<int>que;
que.push();
dis[]=;
int top=;
sta[++top]=;
vis[]=true;
while(top)
{
int u=sta[top--];
vis[u]=false;
for(int i=head[u];i!=-;i=e[i].nxt)
{
int v = e[i].to;
int w = e[i].w;
if(dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
if(!vis[v])
{
vis[v]=true;
sta[++top]= v;
}
}
}
}
}
int main()
{ int m;
scanf("%d%d",&n,&m);
cnt=;
fill(head,head+MAXN,-);
for(int i=;i<m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
} spfa(); printf("%lld\n",dis[n]); }
Subway poj-2502
分析:关键在于寸图
#include <stdio.h>
#include <math.h>
#define maxn 203
#define INF 1e8
#define min(a,b) (a<b?a:b)
#define distance(t,s) sqrt((t.x-s.x)*(t.x-s.x)+(t.y-s.y)*(t.y-s.y)) typedef struct{
int x,y;
}Point; Point point[maxn],a;
int n;
double map[maxn][maxn]; int ex(Point t){
int i;
for(i=;i<n;i++){
if(t.x==point[i].x && t.y==point[i].y) break;
}
if(i==n) point[n++]=t;
return i;
} void dijkstra(){
int i,j,v,vis[maxn];
double min,d[maxn];
for(i=;i<n;i++){
vis[i]=;
d[i]=map[][i];
}
for(i=;i<n;i++){
min=INF;
for(j=;j<n;j++)
if(!vis[j] && d[j]<min){
min=d[j];
v=j;
}
vis[v]=;
for(j=;j<n;j++)
if(!vis[j] && d[j]>map[v][j]+d[v])
d[j]=map[v][j]+d[v];
}
printf("%d\n",(int)(d[]+0.5));
} void floyd(){
int i,j,k;
for(k=;k<n;k++)
for(i=;i<n;i++)
for(j=;j<n;j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
} int main(){
int subway[maxn],scnt;
int i,j,t;
for(i=;i<maxn;i++)
for(j=;j<maxn;j++)
if(i==j) map[i][j]=;
else map[i][j]=INF;
n=;
scanf("%d%d%d%d",&point[n].x,&point[n].y,&point[n+].x,&point[n+].y);
n+=;
while(~scanf("%d%d",&a.x,&a.y)){
t=n;
scnt=;
subway[scnt++]=ex(a); //要判断输入的点是否已经存在
while(scanf("%d%d",&a.x,&a.y) && (a.x!=- && a.y!=-)){
subway[scnt++]=ex(a);
}
for(i=;i<scnt;i++) //地铁的站的时间只能是相邻的站点能到,不能从站点1直接到站点n
map[subway[i]][subway[i-]]=map[subway[i-]][subway[i]]=distance(point[subway[i]],point[subway[i-]])*3.0/2000.0;
}
for(i=;i<n;i++)
for(j=;j<=i;j++)
map[i][j]=map[j][i]=min(map[i][j],distance(point[i],point[j])*3.0/500.0);
dijkstra();//flpyd()
return ;
}
昂贵的聘礼 poj-1062
分析:在于存图和建立一个新的源点
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include <vector>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 3e5+;
const ll mod = 1e9+;
int n,m;
int map[][];
int dis[];
int money[];
int level[];
int minLevel;
int vis[]; void init()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
map[i][j]=(i==j?:INF);
} void Dijkstra()
{
for(int i=;i<n;i++)
{
int minn=INF;
int u=-;
for(int j=;j<=n;j++) {
if (level[j] < minLevel || level[j] - minLevel > m)
continue;
if (dis[j] < minn && !vis[j]) {
minn = dis[j];
u = j;
}
}
if(u==-)
break;
vis[u]=;
for(int j=;j<=n;j++)
{
if(level[j] < minLevel || (level[j]-minLevel > m))
continue;
if(!vis[j] && dis[j]>dis[u]+map[u][j])
dis[j] = dis[u]+map[u][j];
} }
}
int main()
{ cin>>m>>n;
init();
for(int i=;i<=n;i++)
{
int a;
cin>>money[i]>>level[i]>>a;
for(int j=;j<a;j++)
{
int b,c;
cin>>b>>c;
map[b][i]=c;
}
map[][i]=money[i];
}
int ans=INF;
for(int i=;i<=n;i++)
{
minLevel=level[i];
for(int j=;j<=n;j++)
dis[j]=map[][j];
dis[]=;
memset(vis,,sizeof vis);
vis[]=;
Dijkstra();
if(ans>dis[])
ans=dis[];
}
cout<<ans<<endl;
} /*
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
*/
Tram poj-1847
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<stack>
#include<cstdlib>
#include <vector>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 1e5;
const ll mod = 1e9+; struct node
{
int u,v,len,next;
}e[maxn];
int dis[maxn],head[maxn];
bool vis[maxn]; void addedge(int u,int v,int len,int k)
{
e[k].u = u;
e[k].v = v;
e[k].len = len;
e[k].next = head[u];
head[u] = k;
} void spfa(int s)
{
stack<int> sta;
sta.push(s);
while(sta.size())
{
int i=sta.top();
sta.pop();
vis[i] = false;
for(int j=head[i];j!=;j=e[j].next)
{
int u=e[j].u,v=e[j].v,len=e[j].len;
if(dis[u]+len < dis[v])
{
dis[v] = dis[u]+len;
if(vis[v] == false)
{
vis[v]=true;
sta.push(v);
}
}
}
}
}
int main()
{
int N,A,B,k = ;
cin>>N>>A>>B;
memset(head,,sizeof head);
for(int i=;i<=N;i++)
{
int M,v;
dis[i] = INF;
cin>>M>>v;
addedge(i,v,,k++);
for(int j=;j<M;j++)
{
cin>>v;
addedge(i,v,,k++);
}
}
dis[A] = ;
spfa(A);
if(dis[B] == INF)
cout<<-<<endl;
else
cout<<dis[B]<<endl; } /*
3 2 1
2 2 3
2 3 1
2 1 2
*/
kuangbin 最短路集合的更多相关文章
- kuangbin 基础DP集合
HDU 1024第一遍水过,没有体会到这个题的奥妙,思考了很久终于体会了.大概意思是求把序列分成m段的子序列,并不一定要覆盖完,求子序列和的最大值我们首先要写出基本的动态转移方程: DP:dp[ i ...
- bzoj2200拓扑排序+最短路+联通块
自己写的不知道哪里wa了,明明和网上的代码差不多.,. /* 给定一张图,有的边是无向边,有的是有向边,有向边不会出现在环中,且有可能是负权值 现在给定起点s,求出s到其余所有点的最短路长度 任何存在 ...
- 洛谷P1339 热浪【最短路】
题目:https://www.luogu.org/problemnew/show/P1339 题意:给定一张图,问起点到终点的最短路. 思路:dijkstra板子题. 很久没有写最短路了.总结一下di ...
- xsyProblem A: 密集子图(graph)
f[i][S]三进制压缩表示最长路为i,0代表不在该集合,1代表不是最短路为i集合,2代表是最短路集合, 转移枚举i+1集合是那些, 乘以概率即可 预处理保证复杂度 #include<cstdi ...
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ...
- kuangbin带你飞 最短路 题解
求一个图最短路边的办法.好像下面的那个有问题.单向边和双向边一定是有区别的.这个比较容易.参照该文的最短路网络流题目和连通图题目一题求最短路关节边 另外上述2个题目的代码好像有问题. 在UVALIVE ...
- 最短路(代码来源于kuangbin和百度)
最短路 最短路有多种算法,常见的有一下几种:Dijstra.Floyd.Bellman-Ford,其中Dijstra和Bellman-Ford还有优化:Dijstra可以用优先队列(或者堆)优化,Be ...
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...
- HDU6166-求集合间的最短路
Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
随机推荐
- Centos7搭建redis,同一服务器启动两个端口的redis
1.安装redis [1]下载安装包 #准备安装文件夹 mkdir /usr/local/soft/redis #进入文件夹 cd /usr/local/soft/redis #下载安装包 wget ...
- java实现定时任务(Quartz)
java中实现定时任务执行某一业务.具体操作如下: 1.定义初始化任务 2.任务业务操作 3.定义初始化方法 4.在web.xml中注册启动 5.定义具体执行时间 6.quartz定时任务时间设置 q ...
- SQL语句创建数据库以及一些查询练习
--创建 MyCompany数据库 use master execute sp_configure 'show advanced options',1 --开启权限 reconfigure execu ...
- 属性(property)与成员变量(ivar)
类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_n ...
- C# 连接 postgres失败
小程序完成了,要发布到客户的服务器上: 我的测试机:win10 64 数据库:PG9.6.5 64 客户服务器:win7 32 数据库: ...
- WIn10 电脑运行Docker
参考地址: https://www.cnblogs.com/linjj/p/5606687.html https://docs.docker.com/engine/reference/commandl ...
- 第2章 核心C#
1. 变量 1.1 变量需要遵循的规则: 变量必须初始化 初始化器不能为空 初始化器必须放在表达式中 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象 1.2 变量的作用域 只要类在某个 ...
- linux 后渗透测试
学习参考: http://weibo.com/1869235073/B9Seswf9R?type=comment http://weibo.com/p/1001603723521007220513 h ...
- 定时器new Timer().schedule()的使用
Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 ...
- hbase查询语法
1.scan '表名',{FILTER=>"PrefixFilter('rowkey值')"} scan 'useractions',{FILTER=>"Pr ...