代码
(先上代码,后讲思想)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
#define N 10009
#define M 500009
using namespace std;
int dis[N],nxt[M],to[M],w[M],head[N];
int n,m,s;
queue<int> q;
inline int read(){
char ch;
int f=1,res=0;
while((ch=getchar())<'0'||ch>'9')
if(ch=='-') f=-1;
while(ch>='0'&&ch<='9')
{
res=(res<<1)+(res<<3)+(ch^48);//注意位运算的优先级别
ch=getchar();
}
return f*res;
}
int tot=0;
bool vis[N];
void add(int x,int y,int z){
nxt[++tot]=head[x];
head[x]=tot;
w[tot]=z;
to[tot]=y;
}
void spfa(int u){
q.push(u);
vis[u]=1;
while(!q.empty()){
int x=q.front();
q.pop();
vis[x]=0;
for(int i=head[x];i;i=nxt[i]){
int y&