一:bilibili关注up主:蒟蒻算法小课堂的版本
#include <bits/stdc++.h>
using namespace std;
const int maxn=220,maxm=440,inf=0x7f7f7f7f;
struct edge
{
int to,w,next;
}e[maxm];
int n,m,cnt,head[maxn],dis[maxn],q[maxn];
void init()
{
cnt=0;
memset(head,-1,sizeof(head));
}
void adde(int u,int v,int w)
{
e[cnt].to=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt++;
e[cnt].to=u;e[cnt].w=0;e[cnt].next=head[v];head[v]=cnt++;
}
int bfs()
{
memset(dis,-1,sizeof(dis));
int front=0,tail=0;
dis[1]=0;
q[tail++]=1;
while(front<tail)
{
int u=q[front++];
if(u==n)return 1;
//~用于计算时, 是按位取反运算符,比如 ~10101111 结果是01010000
for(int i=head[u];~i;i=e[i].next)
{
int& v=e[i].to,w=e[i].w;
if(dis[v]==-1&&w)