131 条题解
-
9
larryzhong LV 9 @ 8 年前
Floyd
-
37 年前@
-
16 年前@
floyd
ovo!!! -
112 年前@
FLOYED解决之。注意题目,只要是满足是在最短路上的点都可以计入答案。
http://hi.baidu.com/samroxas/item/18e3dcf260386b1ce2e3bd1f -
06 年前@
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[101][101],p;
int ans(int x,int y)
{
int q;
q=0;
for(int i=1;i<=n;i++)
if(a[x][i]+a[i][y]==a[x][y])
q++;
return q;
}
int main()
{
int x,y;
scanf("%d%d",&n,&m);
memset(a,0x3f,sizeof(a));
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
a[x][y]=1;
a[y][x]=1;
}
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j])
{
a[i][j]=a[i][k]+a[k][j];
}
scanf("%d",&p);
while(p--)
{
scanf("%d%d",&x,&y);
printf("%d\n",ans(x,y)+2);
}
return 0;
} -
06 年前@
退役快一年了...
竟然WA了半天
忘记换行了... -
07 年前@
粗糙Floyd
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,p;
int g[108][108],f[108][108];
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&j!=k&&i!=k)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}
int seach(int a,int b)
{
int ans=2;
for(int i=1;i<=n;i++)
{
if(i!=a&&i!=b&&g[a][i]+g[i][b]==g[a][b])
ans++;
}
return ans;
}
int main()
{
memset(g,0x7fffffff,sizeof(g));
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j) g[i][j]=0x3f3f3f3f;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
g[x][y]=g[y][x]=1;
}
floyd();
cin>>p;
for(int i=1;i<=p;i++)
{
int a,b;
cin>>a>>b;
cout<<seach(a,b)<<endl;
}
return 0;
} -
07 年前@
简单的Floyed (≖ ‿ ≖)✧
-
07 年前@
floyd 两遍
-
07 年前@
貌似就我一个傻傻地用了bitset记录最短路点集⊙﹏⊙b
http://www.cnblogs.com/Onlynagesha/p/6965262.html -
012 年前@
水题面板编 连着WA四次。。。。
-
015 年前@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms#include
using namespace std;const int MAXN=10000000;
const int N=101;
int n,m,p;
int f[N][N];int main(void)
{
int x,y;
cin>>n>>m;
for (int i=1;i>y;
f[x][y]=f[y][x]=1;
}
cin>>p;
for (int k=1;k>y;
for (int k=1;k -
015 年前@
我还当就输出一条路上的总点数.就判定是样例错了..,.. 写了个Floyd就交了..全部wa
可是是输出最短路上的总点数!!!多条最短路就得用中间点法求点的个数了!!!!! -
015 年前@
如果 map[a,b]=map[a,k]+map[k,b]
那么 k 就是 a b 最短路上的点。 -
015 年前@
の。看错题了。
-
015 年前@
没什么好说的。。直接floyd。。
输出的时候统计路上节点即可。。对于wa点的同志们。。小小的提个醒。。floyd枚举的顺序是
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do ... -
015 年前@
var
bb:array[1..100]of boolean;
f:array[1..100,1..100]of integer;
path:array[1..100,1..100,0..100]of integer;
i,j,k,m,n,p,a,b,ans,t:integer;
procedure print(a,b:integer);
var
i:integer;
begin
if bb then
begin
inc(ans);
bb:=false;
end;
if a=b then exit;
for i:=1 to path[a,b,0] do
print(a,path[a,b,i]);
end;
begin
readln(n,m);
fillchar(f,sizeof(f),127);
fillchar(path,sizeof(path),0);
for i:=1 to m do
begin
readln(a,b);
f[a,b]:=1;f:=1;
inc(path[a,b,0]);inc(path);
path[a,b,1]:=a;path:=b;
end;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (f+f[k,j]) -
015 年前@
学了半年Floyd还真没白学
n=100不用Floyd做还真是天理不容
就是注意一点 .. 答案要+2 (加上起点和终点两个点)program ex;var a:array[1..100,1..100] of longint ; n,m,p,i,j,x,y,ans:longint
rocedure floyd ;var i,j,k:longint ;begin for k := 1 to n do for i := 1 to n do for j := 1 to n do if (i j) and (j k) and (i k) then if a > a + a[k,j] then begin a := a + a[k,j] ; a[j,i] := a ; end ;end ;BEGIN read(n,m) ; for i := 1 to n do for j := 1 to n do a := maxint ; for i := 1 to m do begin read(x,y) ; a[x,y] := 1 ; a[y,x] := 1 ; end ; floyd ; read(p) ; for i := 1 to p do begin read(x,y) ; ans := 0 ; for j := 1 to n do if a[x,j] + a[j,y] = a[x,y] then inc(ans) ; writeln(ans + 2) ; end ;END .
-
015 年前@
数据太弱了......
-
015 年前@
floyd