POJ 2983 Is the Information Reliable? 依旧差分约束
2024-08-31 19:42:45
http://poj.org/problem?id=2983
题目大意:
星际大战开始了。你购买了情报,需要判断它的准确性。已知地方的根据地在由南向北排成一条直线。P A B X,表示A在B北面距离X光年的地方,另一种是V A B,表示只知道A在B的北面至少1光年的地方。
思路:
可转化为差分约束。
对于P A B X来说因为A-B=X (因为他们相距X光年,我们取北边为正方向) 可以记做: A-B >=X && A-B<=X,即A-B>=X && B-A>=-X
对于V A B ,可以记做 A-B>=1
然后老样子差分约束。记得建立一个连接所有顶点的超级顶点来保证图的连通性~
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAXN=1000+10;
const int MAXM=200000+1000;
const int INF=-9999999;
struct edge
{
int to;
int val;
int next;
}e[MAXM];
int head[MAXN],dis[MAXN],len,n,m; void add(int from,int to,int val)
{
e[len].to=to;
e[len].val=val;
e[len].next=head[from];
head[from]=len++;
} bool spfa()
{
int start=n+1;
for(int i=1;i<=n;i++)
dis[i]=INF; bool vis[MAXN]={0};
int cnt[MAXN]={0};
deque<int> q;
q.push_back(start);
vis[start]=1;
cnt[start]=1;
dis[start]=0;
while(!q.empty())
{
int cur=q.front();
q.pop_front();
vis[cur]=false;
for(int i=head[cur];i!=-1;i=e[i].next)
{
int id=e[i].to;
if(dis[id] < dis[cur] + e[i].val)
{
dis[id]=dis[cur] + e[i].val;
if(!vis[id])
{
if(++cnt[id] > n)
return true;
vis[id]=true;
if(!q.empty() && dis[id] > dis[q.front()])
q.push_back(id);
else
q.push_front(id);
}
}
}
}
return false;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(head,-1,sizeof(head));
len=0; for(int i=0;i<m;i++)
{
char cmd[5];
int from,to,val; scanf("%s",cmd);
if(cmd[0]=='P')
{
scanf("%d%d%d",&from,&to,&val);
add(from,to,-val);
add(to,from,val);
}
else
{
scanf("%d%d",&from,&to);
add(to,from,1);
}
}
for(int i=1;i<=n;i++)
add(n+1,i,0); if(spfa())
puts("Unreliable");
else
puts("Reliable");
}
return 0;
}
最新文章
- Unity StrangeIoC框架
- js正则表达式中test,exec,match方法的区别
- 360浏览器下载excel问题解决方式
- Word 2007 文档结构图混乱
- surface上的手势事件
- JAVA设计模式之工厂模式
- [转]Java Web基础——Action+Service +Dao三层的功能划分
- bzoj4562: [Haoi2016]食物链--记忆化搜索
- jquery 导航固定的一个实例
- 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
- MyEclipse高效开发之必备快捷键技能
- 【设计模式 - 9】之装饰者模式(Decorator)
- MVC与EasyUI结合增删改查
- ELK-Kibana-01
- 深入浅出—Redis集群的相关详解
- Maven &; Gradle 如何从中央仓库下载Jar包
- Nodejs 第一站
- XtraEditors七、ProgressBarControl、MarqueeProgressBarControl、ProgressPanel控件
- Mahout 协同过滤 itemBase RecommenderJob源码分析
- PHP mysqli 增强 批量执行sql 语句的实现代码
热门文章
- 计算加班类型以及小时数(js)
- HBase-scan API 通过scan读取表中数据
- Android自定义视图
- 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁
- js16--自定义原型对象
- 1.3 Quick Start中 Step 6: Setting up a multi-broker cluster官网剖析(博主推荐)
- int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType&#39; on a null.....
- c#的中英文混合字符串截取
- HttpUtility.UrlEncode 方法 (String) 对 URL 字符串进行编码 NET Framework 4.6 and 4.5
- Vue router的query对象里的值的问题