dijiskra重载运算符时我竟然把w>b.w写成w>b.to,调了2h,我哭了。
题意问能否通过时间隧道回溯到出发以前。
SPFA找负环。时间隧道回去的时间相当于一条负边。
1、注意时间隧道是单向边,我还找了半天。。。
2、图可以是不连通的。不能只spfa(1).
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
const int N=5010;
struct node
{
int v,w;
node (int v,int w):v(v),w(w){}
};
vector<node>tr[N];
int dis[N],n;
bool spfa(int s)
{
int cnt[N];
bool vis[N];
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
queue<int>q;
while(!q.empty())
q.pop();
dis[s]=0;
vis[s]=1;
cnt[s]++;
q.push(s);
while(!q.empty())
{
int tmp=q.front();
q.pop();
vis[tmp]=0;
for(