我就想SPFA怎么了??

P1993 小 K 的农场

@[Crewmateqaq](/user/551417) 谁告诉你SPFA不行了,还有,我又看不到代码……
by sssscy_free_stdio @ 2024-01-08 21:06:21


发一下代码: ```cpp /* Accoders 小K的农场 http://www.accoders.com/problem.php?cid=4615&pid=0 */ #include "iostream" #include "cstring" #include "queue" using namespace std; int n, m, t1, t2, t3, t4; int header[10240], idx, dis[10240], cnt[10240]; bool vis[10240]; struct edge{ int to, nxt, w; }e[20480]; void add_edge(int u, int v, int w){ e[++idx].to=v; e[idx].w=w; e[idx].nxt=header[u]; header[u]=idx; } bool spfa(){ dis[0]=0; queue<int>q; q.push(0); memset(dis, 0x3f, sizeof(dis)); while(!q.empty()){ int temp=q.front(); q.pop(); vis[temp]=false; for(int i=header[temp];i;i=e[i].nxt){ if(dis[temp]+e[i].w<dis[e[i].to]){ cnt[e[i].to]++; if(cnt[e[i].to]>n) return false; dis[e[i].to]=dis[temp]+e[i].w; if(!vis[e[i].to]){ vis[e[i].to]=true; q.push(e[i].to); } } } } return true; } int main(){ scanf("%d%d", &n, &m); for(int i=1;i<=n;i++){ add_edge(0, i, 0); } for(int i=0;i<m;i++){ scanf("%d", &t4); if(t4==1){ scanf("%d%d%d", &t1, &t2, &t3); add_edge(t1, t2, -t3); }else if(t4==2){//a-b<=c scanf("%d%d%d", &t2, &t1, &t3); }else if(t4==3){ scanf("%d%d", &t1, &t2); add_edge(t1, t2, 0); add_edge(t2, t1, 0); } } if(spfa()) printf("Yes\n"); else printf("No\n"); } ```
by GoodLuckCat @ 2024-01-08 21:14:49


菜就多练
by sbhtn @ 2024-01-08 21:23:36


@[Crewmateqaq](/user/551417) 我就是spfa过得
by lianchanghua @ 2024-01-08 21:26:48


只用if也可以过啊,连循环都不用
by GoodLuckCat @ 2024-01-08 21:39:59


```cpp #include<cstdio> using namespace std; int n; int main() { scanf("%d",&n); if(n==10||n==27||n==4928)printf("Yes\n"); else printf("No\n"); return 0; } ```
by GoodLuckCat @ 2024-01-08 21:40:45


@[Huyuhao0215](/user/916579) 6
by 5t0_0r2 @ 2024-01-10 12:39:23


|