int n,m;
int h[N],e[N],ne[N],w[N],idx;
void add(int a,int b,int c) {
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
int dfn[N],cnt;
int vis[N],dis[N];
void spfa() {
queue<int>q;
for(int i=1; i<=n; i++)dis[i]=-INF;
dis[1]=0;vis[1]=1;q.push(1);
while(q.size()) {
int t=q.front(); q.pop();
vis[t]=0; //
for(int i=h[t]; ~i; i=ne[i]) {
int j=e[i];
if(dis[j] < dis[t]+w[i]) {
dis[j] = dis[t]+w[i];
if(!vis[j])q.push(j),vis[j]=1;
}
}
}
}