看不出来和这份AC代码有什么不同
#include<bits/stdc++.h>
#define lc(p) ((p)*2)
#define rc(p) ((p)*2+1)
#define mkpr make_pair
#define LL int
using namespace std;
inline LL read() {
char ch=getchar();
LL x=0;
bool t=0;
while(ch<'0'||ch>'9') t|=ch=='-',ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
return t?-x:x;
}
const int M=300005,N=1505;
int n,m;
int S1,S2,T1,T2;
int u[N],v[N],w[N];
struct Edge {
int v,w,nxt;
} e[M<<1];
int cnt,head[N];
void Add(int u,int v,int w) {
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].nxt=head[u];
head[u]=cnt;
}
struct node {
int u;
LL d;
bool operator <(const node &rhs)const {
return d>rhs.d;
}
};
void Dijkstra(int ST,LL *arr) {
priority_queue<node>q;
arr[ST]=0;
q.push((node) {
ST,0
});
while(!q.empty()) {
node fr=q.top();
q.pop();
int u=fr.u;
LL d=fr.d;
if(d!=arr[u])continue;
for(int i=head[u]; i; i=e[i].nxt) {
int v=e[i].v;
LL w=e[i].w;
if(arr[u]+w<arr[v]) {
arr[v]=arr[u]+w;
q.push((node) {
v,arr[v]
});
}
}
}
}
LL dis[2][N],dis2[2][N];
vector<pair<int,int> >G[N];
LL dp[N];
LL DFS(int u) {
if(dp[u])return dp[u];
for(int i=0; i<G[u].size(); i++) {
pair<int,int> ee=G[u][i];
int v=ee.first,w=ee.second;
dp[u]=max(dp[u],DFS(v)+w);
}
return dp[u];
}
bool in[N];
int main() {
n=read();
m=read();
S1=read();
T1=read();
S2=read();
T2=read();
for(int i=1; i<=m; i++) {
u[i]=read();
v[i]=read();
w[i]=read();
Add(u[i],v[i],w[i]);
Add(v[i],u[i],w[i]);
}
memset(dis,0x3f,sizeof dis);
memset(dis2,0x3f,sizeof dis2);
Dijkstra(S1,dis[0]);
Dijkstra(T1,dis[1]);
Dijkstra(S2,dis2[0]);
Dijkstra(T2,dis2[1]);
for(int i=1; i<=n; i++) {
// cout<<dis[0][i]<<" "<<dis[1][i]<<endl;
}
for(int u=1; u<=n; u++) {
for(int i=head[u]; i; i=e[i].nxt) {
int v=e[i].v,w=e[i].w;
if(dis[0][u]+w+dis[1][v]==dis[0][T1]) {
if(dis2[0][u]+w+dis2[1][v]==dis2[0][T2])G[u].push_back(mkpr(v,w)),in[u]=in[v]=1;
if(dis2[0][v]+w+dis2[1][u]==dis2[0][T2])G[v].push_back(mkpr(u,w)),in[u]=in[v]=1;
}
}
}
for(int i=1; i<=n; i++) {
if(in[i]&&!dp[i])DFS(i);
}
LL ans=0;
for(int i=1; i<=n; i++) {
ans=max(ans,dp[i]);
}
cout<<ans;
return 0;
}