并不会写先存个档
#include<bits/stdc++.h>
using namespace std;
#define maxn 1500
#define read(x) scanf("%d",&x)
#define inf ((int)(1e9))
struct Edge{
int x,y,z;
Edge(){}
Edge(int xx,int yy,int zz) {x=xx,y=yy,z=zz;}
};
struct Pair{
int x,z;
Pair(){}
Pair(int xx,int zz) {x=xx,z=zz;}
bool operator < (const Pair& oth) const {
return z>oth.z;
}
};
int n,m;
int s1,t1,s2,t2;
vector<Edge> g[maxn+5];
int dist1[maxn+5],dist2[maxn+5],dist3[maxn+5],dist4[maxn+5];
priority_queue<Pair> que,emp;
int vis[maxn+5];
vector<int> fr1[maxn+5],fr2[maxn+5],fr3[maxn+5],fr4[maxn+5];
vector<int> fr[maxn+5];
int a[maxn+5][maxn+5],b[maxn+5][maxn+5];
void dijkstra (int x,int* dist) {
for(int i=1;i<=n;i++) if(i!=x) dist[i]=1e9;
memset(vis,0,sizeof(vis));
que=emp;
que.push(Pair(x,0));
while(!que.empty()) {
int h=que.top().x;que.pop();
if(vis[h]) continue;
vis[h]=true;
for(int i=0;i<g[h].size();i++) {
int x=g[h][i].y;
if(dist[x]>dist[h]+g[h][i].z) {
dist[x]=dist[h]+g[h][i].z;
fr[x].clear();
fr[x].push_back(h);
que.push(Pair(x,dist[x]));
} else if(dist[x]==dist[h]+g[h][i].z) fr[x].push_back(h);
}
}
}
int main() {
read(n),read(m);
read(s1),read(t1),read(s2),read(t2);
for(int i=1;i<=m;i++) {
int x,y,z;
read(x),read(y),read(z);
g[x].push_back(Edge(x,y,z));
g[y].push_back(Edge(y,x,z));
}
for(int i=1;i<=n;i++) fr[i].clear();
dijkstra(s1,dist1);
for(int i=1;i<=n;i++) fr1[i]=fr[i];
for(int i=1;i<=n;i++) fr[i].clear();
dijkstra(t1,dist2);
for(int i=1;i<=n;i++) fr2[i]=fr[i];
for(int i=1;i<=n;i++) fr[i].clear();
dijkstra(s2,dist3);
for(int i=1;i<=n;i++) fr3[i]=fr[i];
for(int i=1;i<=n;i++) fr[i].clear();
dijkstra(t2,dist4);
for(int i=1;i<=n;i++) fr4[i]=fr[i];
/*
printf(" 1 -- ");
for(int i=1;i<=n;i++) {
printf("%d ",dist1[i]);
}
printf("\n");
printf(" 1 -- \n");
for(int i=1;i<=n;i++) {
printf(" %d -- ",i);
for(int j=0;j<fr1[i].size();j++) printf("%d ",fr1[i][j]);
printf("\n");
}
printf(" 2 -- ");
for(int i=1;i<=n;i++) {
printf("%d ",dist2[i]);
}
printf("\n");
printf(" 2 -- \n");
for(int i=1;i<=n;i++) {
printf(" %d -- ",i);
for(int j=0;j<fr2[i].size();j++) printf("%d ",fr2[i][j]);
printf("\n");
}
printf(" 3 -- ");
for(int i=1;i<=n;i++) {
printf("%d ",dist3[i]);
}
printf("\n");
printf(" 3 -- \n");
for(int i=1;i<=n;i++) {
printf(" %d -- ",i);
for(int j=0;j<fr3[i].size();j++) printf("%d ",fr3[i][j]);
printf("\n");
}
printf(" 4 -- ");
for(int i=1;i<=n;i++) {
printf("%d ",dist4[i]);
}
printf("\n");
printf(" 4 -- \n");
for(int i=1;i<=n;i++) {
printf(" %d -- ",i);
for(int j=0;j<fr4[i].size();j++) printf("%d ",fr4[i][j]);
printf("\n");
}
*/
for(int i=1;i<=n;i++) for(int j=0;j<fr1[i].size();j++) a[i][fr1[i][j]]++;
for(int i=1;i<=n;i++) for(int j=0;j<fr2[i].size();j++) b[i][fr2[i][j]]++;
for(int i=1;i<=n;i++) for(int j=0;j<fr2[i].size();j++) a[i][fr2[i][j]]++;
for(int i=1;i<=n;i++) for(int j=0;j<fr4[i].size();j++) b[i][fr4[i][j]]++;
return 0;
}