F题笔记
This commit is contained in:
parent
d34e7717dc
commit
c23a038c0f
70
8.15/F-Candies/F-Candies.cpp
Normal file
70
8.15/F-Candies/F-Candies.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
#include <stack>
|
||||
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<int> 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;
|
||||
}
|
17
8.15/F-Candies/Readme.md
Normal file
17
8.15/F-Candies/Readme.md
Normal file
@ -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<int> q; // queue没有自带函数清零
|
||||
in[u] = 0; // spfa的精髓!!不要忘了每次弹出
|
||||
// n,m不分
|
||||
### 工具箱
|
||||
* memset(dist,0x3f,sizeof dist);//更好的賦初值方法 https://www.cnblogs.com/td15980891505/p/5431898.html
|
||||
* queue<int> q; // queue没有自带函数清零,每次重开就行
|
Loading…
x
Reference in New Issue
Block a user