1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<vector> 5 using namespace std; 6 7 vector<pair<int,int>>nextval[10010]; 8 bool vis[10010]; 9 const int INF = 0x3f3f3f3f; 10 int dis[10010]; 11 int n, m; 12 int cnt; 13 14 15 bool spfa(int node) 16 { 17 vis[node] = true; 18 for (int i = 0; i < nextval[node].size(); i++) 19 { 20 if (dis[nextval[node][i].first] < dis[node] + nextval[node][i].second) 21 { 22 dis[nextval[node][i].first] = dis[node] + nextval[node][i].second; 23 if (vis[nextval[node][i].first]) return false; 24 if (!spfa(nextval[node][i].first)) return false; 25 } 26 } 27 vis[node] = false; 28 return true; 29 } 30 31 int main() 32 { 33 cin >> n >> m; 34 for (int i = 1; i <= m; i++) 35 { 36 37 int a, b, c, d; 38 cin >> a >> b >> c; 39 if (a == 1 || a == 2) cin >> d; 40 if (a == 1) 41 { 42 pair<int, int>t(b, d); 43 nextval[c].push_back(t); 44 } 45 if (a == 2) 46 { 47 pair<int, int>t(c, -d); 48 nextval[b].push_back(t); 49 } 50 if (a == 3) 51 { 52 pair<int, int>t1(b, 0); 53 pair<int, int>t2(c, 0); 54 nextval[b].push_back(t2); 55 nextval[c].push_back(t1); 56 } 57 } 58 bool flag = false; 59 for (int i = 1; i <= n; i++) 60 { 61 if (!spfa(i)) flag = true; 62 } 63 if (flag) cout << "No"; 64 else cout << "Yes"; 65 return 0; 66 }