90 pts #2 WA 求助。
查看原帖
90 pts #2 WA 求助。
1296826
lcfollower楼主2024/7/11 15:17

rt,可能是个 rz 错误,大佬勿喷。

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define inf 0x3f3f3f3f
#define infi 0x3f3f3f3f3f3f3f3fll
#define _Dark_Star exit(0)
#define up(i,x,y) for(register int i=x;i<=y;++i)
#define dn(i,x,y) for(register int i=x;i>=y;--i)
#define max(a,b) a > b ? a : b

using namespace std;

inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}
const int N = 105;
int n ,m ,dis[N][N] ,dis1[N][N] ,ans = infi;
signed main(){
  n = read() , m = read();
  up(i,1,n) up(j,1,n) if(i != j) dis[i][j] = dis1[i][j] = 2147483647;
  up(i,1,m){
    int u = read() ,v = read() ,w = read();
    if(u == v) continue;
    dis[u][v] = dis[v][u] = dis1[u][v] = dis1[v][u] = min(dis[u][v] ,w);
  }
  up(k,1,n){
    up(i,1,n) up(j,1,n){
      if(i != j && dis[i][k] > 0 && dis[k][j] > 0) ans = min(ans ,dis1[i][j] + dis[i][k] + dis[k][j]);
      dis1[i][j] = min(dis1[i][k] + dis1[k][j] ,dis1[i][j]);
    }
  }
  if(ans == infi) puts("No solution.");
  else writeln(ans);
  return 0;
}
2024/7/11 15:17
加载中...