1421:Floyd

简介: 1421:Floyd

1421:Floyd

时间限制: 1000 ms         内存限制: 131072 KB

【题目描述】

给定一个n个点m条边的有向图。Dis(a,b)表示a到b的最短距离,如果a无法到b,则Dis(a,b)=10^16,规定 Dis(a,a)=0。

读懂以下程序,并输出S。

long long S,f=1e16;

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

   S^=Dis(i,j)+f;

【输入】

第一行两个整数n,m,代表点数和边数; 接下来m行,每行三个整数s,t,d,代表从s到t有一条长度为d的有向边。

【输出】

输出一个整数表示S。

【输入样例】

2 3

1 2 1

1 2 3

2 2 0

【输出样例】

28300427233787905

【提示】

数据规模及约定

N≤500,0≤M≤250000,1≤S,T≤N,−10^9≤D≤10^9

保证没有负环。

1. #include <bits/stdc++.h>
2. using namespace std;
3. long long dist[505][505];
4. long long n,m;
5. long long s,t,d;
6. void Floyd(){//搜索路径
7.  for(int k=1;k<=n;k++)
8.    for(int i=1;i<=n;i++)
9.      for(int j=1;j<=n;j++)
10.         if(dist[i][k]!=1e16 && dist[k][j]!=1e16)
11.           dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
12. }
13. int main() {
14.     cin>>n>>m;
15. for(int i=1;i<=n;i++)
16.   for(int j=1;j<=n;j++)
17.     if(i==j) dist[i][j]=0;
18.     else dist[i][j]=1e16;
19. for(int i=1;i<=m;i++){
20.     cin>>s>>t>>d;
21.     dist[s][t]=min(dist[s][t],d);
22.   }
23.   Floyd();
24.   long long s=0;
25.   for(int i=1;i<=n;i++)
26.     for(int j=1;j<=n;j++)
27.       s ^=(dist[i][j]+(long long)(1e16));
28.     cout<<s;
29. return 0;
30. }


相关文章
|
3月前
floyd
floyd
33 5
|
6月前
|
存储 算法
Dijkstra
Dijkstra“【5月更文挑战第18天】”
55 6
|
6月前
|
Java
hdu-1874-畅通工程续(dijkstra + SPFA )
hdu-1874-畅通工程续(dijkstra + SPFA )
35 0
|
算法
SPFA算法-最短路-负环
SPFA算法-最短路-负环
84 0
|
6月前
|
存储 算法
最短路之SPFA算法
最短路之SPFA算法
55 0
|
存储 算法
最短路径算法( Dijkstra + Bellman-Ford + SPFA + Floyd)
最短路径算法( Dijkstra + Bellman-Ford + SPFA + Floyd)
178 0
|
算法
Floyd
复习acwing算法基础课的内容,本篇为讲解基础算法:Floyd,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
131 0
Floyd