tyvj 1415 西瓜种植
来源:互联网 发布:西安飞机工业待遇 知乎 编辑:程序博客网 时间:2024/04/23 23:37
【分析】
差分约束系统啦
如果大家对差分约束系统不了解,那么就去看一下我博客上的讲解吧。不了解这个是很难看懂分析的。
【传送门在此】
题意要求至少多少西瓜,所以应该是求单源最长路,我们可以把它翻过来转化为求单源最短路。
用 f[i] 表示1~i 这i块地中种植的西瓜总数,那么对于每一个条件:左端点为l,右端点为r,须种植d个瓜及以上,容易得到:
f[r]-f[l-1]>=d
根据上文介绍,为了转化为单源最短路问题,我们从 l-1 向 r 连一条长度为 -d 的边
还有隐含条件:
f[i]-f[i-1]>=0
f[i-1]>=f[i]-1
从 i-1 向 i 连一条长度为0的边,从 i 向 i-1 连一条长度为 1 的边。
下面就是简单的求单源最短路,然后输出 dis[n]
【代码】
//tyvj1415 西瓜种植 #include<iostream>#include<cstdio>#include<cstring>#include<vector>#define fo(i,j,k) for(int i=j;i<=k;i++)using namespace std;vector <int> f[5001];vector <int> l[5001]; int n,m,x,y,d;int dis[5001],q[500001];bool vis[5001];int main(){ memset(dis,0x7f,sizeof dis); scanf("%d%d",&n,&m); fo(i,1,n) f[i-1].push_back(i),l[i-1].push_back(0), f[i].push_back(i-1),l[i].push_back(1); fo(i,1,m) { scanf("%d%d%d",&x,&y,&d); f[x-1].push_back(y); l[x-1].push_back(-d); } dis[0]=0; vis[0]=1; int h=0,t=1; q[t]=0; while(h<t) { int u=q[++h]; vis[u]=0; int x=f[u].size()-1; fo(i,0,x) { int v=f[u][i]; if(dis[v]>dis[u]+l[u][i]) { dis[v]=dis[u]+l[u][i]; if(!vis[v]) vis[v]=1,q[++t]=v; } } } printf("%d\n",-dis[n]); return 0;}
1 0
- tyvj 1415 西瓜种植
- Tyvj1415西瓜种植题解
- 笨笨的西瓜种植【贪心】
- 考试题目“笨笨的西瓜种植”
- 模拟考试9.3-笨笨的西瓜种植(watermelon.cpp)
- 树状数组+快排 笨笨的西瓜种植(赛)
- NOIP2016年普及组模拟考试(9.3) 2.笨笨的西瓜种植
- 【NOIP普及组】2016年模拟考试(9.3)——笨笨的西瓜种植
- tyvj 1415
- 西瓜
- 西瓜
- TYVJ
- 种植树苗
- 种植树苗
- 西瓜爱情
- 西瓜上架
- 分西瓜
- 切西瓜
- 根据前序和中序序列确定二叉树
- static在C语言中主要是两种用法
- MySQL学习笔记第6课(共10课)
- 数据结构实验之排序三:bucket sort
- 快速排序和冒泡排序
- tyvj 1415 西瓜种植
- 109.leetcode Convert Sorted List to Binary Search Tree(medium)[链表 平衡二叉搜索树 二分查找]
- Medium of Two Sorted Arrays
- 全角转半角/半角转全角(Python)
- Shader特效——“马赛克”的实现【GLSL】
- 指针的理解
- C语言之结构体 现有36名教师,每个教师包括教工号,姓名,工资共三项基本信息,请用C语言编程,从键盘上输入每一位教师的基本信息,并打印输出工资最高者的工号,姓名工资和所有教师的平均工资
- IOS-多线程(非常全面)
- 二维码的扫描