hdu 1531(差分约束)
来源:互联网 发布:手机调音量软件 编辑:程序博客网 时间:2024/05/17 02:08
传送门
题解:
转为前缀处理。
如果大于,s[u+len]-s[u-1]≥k+1,s[u-1]≤s[u+len]-k-1,连边(u+len,u-1,-k-1)
如果小于,s[u+len]-s[u-1]≤k-1,s[u+len]≤s[u-1]+k-1,连边(u-1,u+len,k-1)
所有点入队,跑SPFA判负环即可。
P.S.这数据范围也太小了吧。。。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int MAXN=104,INF=0x3f3f3f3f;int n,m;int head[MAXN],edge=0;struct EDGE { int v,nxt,w;}e[MAXN];int dis[MAXN],in[MAXN];bool vis[MAXN];inline void adde(int u,int v,int w) { e[++edge].nxt=head[u],e[edge].v=v,e[edge].w=w,head[u]=edge;}inline bool spfa() { ++n; queue<int> q; for (int i=0;i<n;++i) vis[i]=true,in[i]=1,dis[i]=0,q.push(i); while (!q.empty()) { int p=q.front(); q.pop(); vis[p]=false; for (int i=head[p];~i;i=e[i].nxt) { int v=e[i].v; if (dis[v]>dis[p]+e[i].w) { dis[v]=dis[p]+e[i].w; if (!vis[v]) { vis[v]=true; q.push(v); if (++in[v]>n) return false; } } } } return true;}int main() {// freopen("hdu 1531.in","r",stdin); while (scanf("%d%d",&n,&m)&&n) { edge=0; memset(head,-1,sizeof(head)); for (int i=0;i<m;++i) { int u,len,k; char ss[5]; scanf("%d%d%s%d",&u,&len,ss,&k); if (ss[0]^'l') adde(u+len,u-1,-k-1); else adde(u-1,u+len,k-1); } puts(spfa()?"lamentable kingdom":"successful conspiracy"); } return 0;}
阅读全文
0 0
- HDU 1531(差分约束)
- hdu 1531(差分约束)
- HDU 1531 差分约束
- hdu 1531(差分约束)
- HDU 1531 (差分约束)
- hdu 1531 差分约束
- hdu 1531 King (差分约束 + Bellman) 还不是很懂 差分约束 + SPAF
- HDU 1531 King 差分约束
- 【HDU】1531 King 差分约束
- HDU 1531 King (差分约束)
- |hdu 1531|差分约束|King
- HDU 1384 Intervals(差分约束)
- HDU 1384 Intervals (差分约束)
- HDU 3666 (差分约束)
- hdu 3440(差分约束)
- 【差分约束】hdu 3666
- hdu 3666 #差分约束
- hdu 3592 差分约束
- LeetCode1. Two Sum
- HttpClient连接超时及读取超时
- unit7
- Face The Right Way
- 动态规划-122. Best Time to Buy and Sell Stock II
- hdu 1531(差分约束)
- Leaflet入门之地图显示
- 例题6-8 二叉树的递归遍历 uva548
- 编辑联系5
- Lucene查询数据的相关度排序问题
- 十八岁的我们
- Portlet 通信(四) 利用事件传递参数
- Face Recognition(face_recognition) Using Hadoop Streaming API
- Nginx源码编译安装