- #include
- #include
- using namespace std;
- const int N=2010,M=10010;
- int h[N],e[M],w[M],ne[M],idx;
- int dist[N],q[N*M],cnt[N];
- bool st[N];
- int n,m;
-
- void add(int a,int b,int c){
- e[idx] = b;
- w[idx] = c;
- ne[idx] = h[a];
- h[a] = idx++;
- }
-
- bool spfa(){
- int hh=0,tt=-1;
-
- for(int i=1;i<=n;i++){
- st[i] = true;
- q[++tt] = i;
- }
-
- while(hh<=tt){
- int t=q[hh++];
- st[t] = false;
- for(int i=h[t];i!=-1;i=ne[i]){
- int j=e[i];
- if(dist[j]>dist[t]+w[i]){
- dist[j]=dist[t]+w[i];
- cnt[j]=cnt[t]+1;
- if(cnt[j]>=n) return true;
- if(!st[j]){
- st[j]=true;
- q[++tt] = j;
- }
- }
- }
- }
- return false;
- }
-
- int main(){
- scanf("%d%d",&n,&m);
- memset(h,-1,sizeof h);
- while(m--){
- int a,b,c;
- scanf("%d%d%d",&a,&b,&c);
- add(a,b,c);
- }
- if(spfa()) puts("Yes");
- else puts("No");
- }