#include #include #include #include #define N 3010 #define M 200010 #define inf 200000000 typedef long long ll; using namespace std; int n,m; int head[N],cnt; int dp[4][N]; bool vis[N]; vectorvv; struct Edge{ int v,c,ne; }edge[M*2]; void addedge(int u,int v,int w){ edge[cnt].v=v; edge[cnt].c=w; edge[cnt].ne=head[u]; head[u]=cnt++; edge[cnt].v=u; edge[cnt].c=w; edge[cnt].ne=head[v]; head[v]=cnt++; } void init(){ memset(head,-1,sizeof(head)); cnt=0; } void SPFA(int u){ queueq; int i; for(i=1;i<=n;i++){ dp[u][i]=inf; vis[i]=0; } q.push(u); dp[u][u]=0; vis[u]=1; while(!q.empty()){ int v=q.front(); q.pop(); for(int i=head[v];i!=-1;i=edge[i].ne){ int vv=edge[i].v; if(dp[u][v]+edge[i].c1){ flag=0; break; } } if(flag && dp[1][i]!=inf && dp[2][i]!=inf && dp[3][i]!=inf) vv.push_back(i); } int len=vv.size(); if(len){ printf("%d\n",len); for(i=0;i