帮帮忙。。。90pts?

P1993 小 K 的农场

好霸气的理由:不想看题解。。。
by kgory @ 2019-11-14 20:56:00


@[以墨](/user/18993) 我也是90pts 帮帮我呗 ```cpp #include <stack> #include <queue> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define reg register int #define isdigit(x) ('0' <= x&&x <= '9') template<typename T> inline T Read(T Type) { T x = 0,f = 1; char a = getchar(); while(!isdigit(a)) {if(a == '-') f = -1;a = getchar();} while(isdigit(a)) {x = (x << 1) + (x << 3) + (a ^ '0');a = getchar();} return x * f; } const int MAXN = 100010,MAXM = 200010; struct EDGE { int v,w,_nxt; }edge[MAXM << 1]; int cnt,_ori[MAXN]; inline void add(int u,int v,int w) { edge[++cnt].v = v; edge[cnt]._nxt = _ori[u]; edge[cnt].w = w; _ori[u] = cnt; } #define code_out {printf("No");exit(0);} typedef long long ll; bool vis[MAXN]; ll d[MAXN]; int used[MAXN],n,k; inline void dijkstra(int s) { memset(d,-1,sizeof(d)); stack<int> q; q.push(s),vis[s] = 1,d[s] = 0; while(!q.empty()) { int tp = q.top();q.pop(); if(used[tp] >= n) code_out used[tp]++,vis[tp] = 0; for(reg e = _ori[tp],v;e;e = edge[e]._nxt) { if(d[tp] + edge[e].w > d[v = edge[e].v]) { d[v] = d[tp] + edge[e].w; if(!vis[v]) q.push(v); vis[v] = 1; } } } } int main() { n = Read(1),k = Read(1); for(reg i = 1;i <= k;i++) { int sit = Read(1),u = Read(1),v = Read(1),w; switch(sit) { case 1: w = Read(1); if(v == u&&!w) code_out add(v,u,w); break; case 2: w = Read(1); if(v == u&&!w) code_out add(u,v,-w); break; case 3: add(u,v,0),add(v,u,0); break; } } dijkstra(1); printf("Yes"); return 0; } ```
by 何もないです @ 2019-11-17 13:28:19


|