diff --git a/8.15/F-Candies/F-Candies.cpp b/8.15/F-Candies/F-Candies.cpp new file mode 100644 index 0000000..b27b54f --- /dev/null +++ b/8.15/F-Candies/F-Candies.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +using namespace std; +const int N = 3e4 + 5, N3 = 15e4 + 5, inf = 0x3f3f3f3f; +int to[N3], ne[N3], w[N3], h[N], cnt = 0, s = N - 4, e, dist[N]; +bool in[N], wa = 0; +int u, v, w1;//WA 和bool放一起了 +int n, m, maxn = 0; +void add(int u, int v, int w1) +{ + to[++cnt] = v; + ne[cnt] = h[u]; + w[cnt] = w1; + h[u] = cnt; +} +void spfa(int s) +{ + memset(dist,0x3f,sizeof dist);//更好的賦初值方法 + dist[s] = 0;//和賦inf顺序反了=白干 + stack q; // queue没有自带函数清零 + q.push(s); + while (!q.empty()) + { + u = q.top(); + q.pop(); + in[u] = 0; // spfa的精髓!! + for (int i = h[u]; i; i = ne[i]) + { + v = to[i], w1 = w[i]; + // printf("%d %d %d\n",u,v,w1); + if (dist[u] + w1 < dist[v]) + { + dist[v] = dist[u] + w1; + // printf("%d(%d) %d(%d) %d\n",u,dist[u],v,dist[v],w1); + if (!in[v]) + { + q.push(v); + in[v] = 1; + } + } + } + } +} +int main() +{ + scanf("%d%d", &n, &m); + // for (int i = 0; i <= n; i++) + // { + // dist[i] = inf; + // } + for (int i = 1; i <= m; i++) // n,m不分 + { + scanf("%d%d%d", &u, &v, &w1); + add(u, v, w1); + } + spfa(1); + // maxn = 0; + // for(int i=2;i<=n;i++) + // { + // if(dist[i]>maxn) + // { + // maxn=dist[i]; + // } + // } + printf("%d", dist[n]); + return 0; +} diff --git a/8.15/F-Candies/Readme.md b/8.15/F-Candies/Readme.md new file mode 100644 index 0000000..2c550fb --- /dev/null +++ b/8.15/F-Candies/Readme.md @@ -0,0 +1,17 @@ +# F - Candies +* https://vjudge.net/contest/509525#problem/F +### 题意 +给定m对A认为B可以比他大C,求编号1与编号n的最大差距 +### 做法 +差分约束、单源最短路 +### 关键词 +差分约束、sfpa、inf、memset +### 易错点 +//WA! int和bool放一起了 +dist[s] = 0;//和賦inf顺序反了=白干 +stack q; // queue没有自带函数清零 +in[u] = 0; // spfa的精髓!!不要忘了每次弹出 +// n,m不分 +### 工具箱 +* memset(dist,0x3f,sizeof dist);//更好的賦初值方法 https://www.cnblogs.com/td15980891505/p/5431898.html +* queue q; // queue没有自带函数清零,每次重开就行 \ No newline at end of file