//这个题目我原本想用dfs()暴力,果然TLE,记住雪哥的话:写码之前一定要复杂度分析! //然后用SPFA,发现SPFA不能存在负回路,因为会死循环 //只能bellman-ford了,应该判断存在负回路还可以使用拓扑排序..马上学习下#include <iostream> #include <cstdio> #include <queue> #include <memory.h> using namespace std; const int MAX=2024,INF=1<<30; int n,m, first[MAX],next[MAX],u[MAX],v[MAX],w[MAX],d[MAX]; queue<int> q; bool bellman_ford(){ for(int i=0;i<n;i++) d[i]=INF; d[0]=0; for(int k=0;k<n-1;k++)//最多有n-1个边 for(int i=0;i<m;i++) if(d[v[i]]>d[u[i]]+w[i]) d[v[i]]=d[u[i]]+w[i]; for(int i=0;i<m;i++){ if(d[v[i]]>d[u[i]]+w[i]) return 0; } return 1; } int main() { freopen("i.txt","r",stdin); int nCase; cin>>nCase; while(nCase--){ cin>>n>>m; memset(first,-1,sizeof(first)); for(int i=0;i<m;i++){ cin>>u[i]>>v[i]>>w[i]; //cout<<u[i]<<" "<<v[i]<<" "<<w[i]<<endl; next[i]=first[u[i]]; first[u[i]]=i; } if(!bellman_ford()) cout<<"possible"<<endl; else cout<<"not possible"<<endl; } return 0; }