lightoj 1074
这题怎么说呢,负环上的点都不行
网上也有很多解法
我用dfs的spfa解的
我发现网上别人的代码都是用bfs的spfa写的,我就用的dfs的,快了好多
代码还看的别人的,只有中间的spfa是自己写的
我自己原来写的不知道为什么就过不了
把别人的spfa换成自己的就过了
这个是ac的:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std; const int N = ;
const int MAX = 0x3f3f3f3f;
int dis[N];
int p[N];
int h[N];
int cnt[N];
bool vis[N];
bool r[N];
int c[N]; struct Node
{
int u, v, w, next;
}e[N*N]; void dfs(int x)
{
r[x] = ;
for(int i=h[x]; i!=-; i=e[i].next)
if(!r[e[i].v])
dfs(e[i].v);
} void spfa(int u)
{
if(r[u])
return ;
vis[u] = true;
for(int i = h[u]; i != -; i = e[i].next)
{
int v,w;
v = e[i].v;
w = e[i].w;
if(dis[v] > dis[u] + w)
{
dis[v] = dis[u]+w;
if(vis[v])
{
dfs(v);
return ;
}
else
{
spfa(v);
}
}
}
vis[u] = false;
} int main()
{
int T;
scanf("%d", &T);
for(int tt=; tt<=T; tt++)
{
int n, m;
scanf("%d", &n);
memset(cnt, , sizeof(cnt));
memset(vis, , sizeof(vis));
memset(r, , sizeof(r));
memset(dis, 0x3f3f3f3f, sizeof(dis));
for(int i=; i<=n; i++)
scanf("%d", &p[i]);
scanf("%d", &m);
memset(h, -, sizeof(h));
for(int i=; i<m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
e[i].u = a;
e[i].v = b;
e[i].w = (p[b]-p[a])*(p[b]-p[a])*(p[b]-p[a]);
e[i].next = h[a];
h[a] = i;
}
int Q;
scanf("%d", &Q);
for(int i=; i<Q; i++)
scanf("%d", &c[i]);
printf("Case %d:\n", tt); dis[] = ;
spfa();
for(int i=; i<Q; i++)
{
int to = c[i];
if(dis[to]==MAX || r[to] || dis[to] < )
printf("?\n");
else
printf("%d\n", dis[to]);
}
}
return ;
}
这个是wa的,那位dalao帮我抓抓虫啊,真的苦,我看了半天楞是没看出来
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = ;
const int INF = 0x3f3f3f3f;
int n,m;
int cnt;
struct node
{
int v,w;
};
bool vis[maxn];
int head[maxn];
int nex[maxn];
node e[maxn*maxn];
int dis[maxn];
int busy[maxn];
bool vis2[maxn];
int c[maxn];
void adde(int u,int v,int w)
{
node t;
t.v = v;
t.w = w;
e[cnt] = t;
nex[cnt] = head[u];
head[u] = cnt ++;
}
void spfa(int u);
void dfs(int u);
int main()
{
int t;
scanf("%d",&t);
for(int k = ; k <= t; ++k)
{
memset(vis2,,sizeof(vis2));
memset(dis,0x3f,sizeof(dis));
memset(vis,,sizeof(vis));
memset(head,-,sizeof(head));
//memset(cn,0,sizeof(cn));
memset(nex,-,sizeof(nex));
memset(e,,sizeof(e));
cnt = ;
scanf("%d",&n);
for(int i = ; i <= n; ++i)
scanf("%d",busy+i); scanf("%d",&m);
for(int i = ; i < m; ++i)
{
int a,b;
scanf("%d%d",&a,&b);
int c = (busy[b] - busy[a])*(busy[b] - busy[a])*(busy[b] - busy[a]);
adde(a,b,c);
}
int Q;
scanf("%d",&Q);
for(int i = ; i < Q; ++i)
scanf("%d",c+i); printf("Case %d:\n", k);
dis[] = ;
spfa();
for(int i = ; i < Q; ++i)
{
if(dis[c[i]] == INF || vis2[c[i]] || dis[c[i]] < )
printf("?\n");
else
printf("%d\n",dis[c[i]]);
}
}
return ;
}
void spfa(int u)
{
if(vis2[u])
return ;
vis[u] = true;
for(int i = head[u]; i != -; i = nex[i])
{
int v,w;
v = e[i].v;
w = e[i].w;
if(dis[v] > dis[u] + w)
{
dis[v] = dis[u]+w;
if(vis[v])
{
dfs(v);
return ;
}
else
{
spfa(v);
}
}
}
vis[u] = false;
}
void dfs(int u)
{
vis2[u] = true;
for(int i = head[u]; i != -; i = nex[i])
{
int v = e[i].v;
if(vis2[v] == false)
dfs(v);
}
}
lightoj 1074的更多相关文章
- lightoj 1074 spfa判断负环
Extended Traffic Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Sub ...
- LightOJ 1074 - Extended Traffic (SPFA)
http://lightoj.com/volume_showproblem.php?problem=1074 1074 - Extended Traffic PDF (English) Stati ...
- LightOj 1074 Extended Traffic (spfa+负权环)
题目链接: http://lightoj.com/volume_showproblem.php?problem=1074 题目大意: 有一个大城市有n个十字交叉口,有m条路,城市十分拥挤,因此每一个路 ...
- lightoj 1074 - Extended Traffic(spfa+负环判断)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1074 题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J ...
- SPFA(负环) LightOJ 1074 Extended Traffic
题目传送门 题意:收过路费.如果最后的收费小于3或不能达到,输出'?'.否则输出到n点最小的过路费 分析:关键权值可为负,如果碰到负环是,小于3的约束条件不够,那么在得知有负环时,把这个环的点都标记下 ...
- kuangbin_ShortPath O (LightOJ 1074)
这是什么鬼OJ啊都没见过害的我还交错语言CE了一发摔 想着懒得重写了直接把上一题的dij改了改就交了 然后RE 反应过来这题有负环 想着怎么标记负环同时不直接结束spfa 看了别人的代码感叹了一下我还 ...
- LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)
Extended Traffic 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/O Description Dhaka city ...
- LightOJ 1074 Extended Traffic SPFA 消负环
分析:一看就是求最短路,然后用dij,果断错了一发,发现是3次方,有可能会出现负环 然后用spfa判负环,然后标记负环所有可达的点,被标记的点答案都是“?” #include<cstdio> ...
- (简单) LightOJ 1074 Extended Traffic,SPFA+负环。
Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked ...
随机推荐
- 卷积神经网络系列之softmax,softmax loss和cross entropy的讲解
我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...
- paloalto防火墙版本升级
1.准备工作:此部分不影响生产环境,可直接操作. 1)备份: 2)下载OS HA情况下,在主机下载完成后,选择 Sync To Peer(同步到对端)同步到备机. 2.安装更新 1)在备机上选择安装 ...
- ViewPager中Fragment的重复创建、复用问题
在ViewPager中的Fragment的生命周期 随着页面的切换 当前的展示页相邻的页面生命周期一直在变化 一开始 刚进入Activity时候,ViewPager默认初始化好前两个Fragment ...
- Linux使用yum安装JDK
安装jdk8 检查系统是否自带open-jdk输入命令: #rpm -qa|grep java #rpm -qa|grep jdk 如果没有输入信息表示没有安装,如果安装可以输入命令:#rpm -qa ...
- 结对项目——四则运算GUI项目
一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...
- bootstrap-table 踩坑手记
官方文档: http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 渲染表格有两种方法: 1)data属性渲染表格 2)js代码渲染表 ...
- 图解Golang的GC算法
虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了. 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mar ...
- 4-3 重构发送post请求
当创建好一个post请求后 怎么测试呢?
- 南昌邀请赛I.Max answer 单调栈+线段树
题目链接:https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value of a in ...
- oo第八次作业
oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...