LightOj 1074 Extended Traffic (spfa+负权环)
2024-08-28 02:50:47
题目链接:
http://lightoj.com/volume_showproblem.php?problem=1074
题目大意:
有一个大城市有n个十字交叉口,有m条路,城市十分拥挤,因此每一个路都有一个拥挤度,政府就出台了一个政策,对每一条路收取过路费,收取标准为(终点拥挤度 - 起点拥挤度 )3,,问每次询问m,输出1到m的最小花费,如果不能到达或者最小化费小于3的时候输出‘?’。
解题思路:
用spfa。标记负环。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; #define maxn 210
#define INF 0x3f3f3f3f struct Edge
{
int e, w;
Edge(int e=, int w=):e(e),w(w){}
}; vector<Edge>G[maxn];
int dist[maxn], n;
bool Cin[maxn];
void init();
int spfa ();
void dfs (int u); int main ()
{
int m, t, l=, map[maxn];
scanf ("%d", &t); while (t --)
{
printf ("Case %d:\n", ++l);
init ();
scanf ("%d", &n); for (int i=; i<=n; i++)
scanf ("%d", &map[i]); scanf ("%d", &m);
while (m --)
{
int a, b, num;
scanf ("%d %d", &b, &a);
num = (map[a] - map[b]) * (map[a] - map[b]) * (map[a] - map[b]);
G[b].push_back (Edge(a, num));
}
spfa ();
scanf ("%d", &m);
while (m --)
{
int num;
scanf ("%d", &num);
if (Cin[num] || dist[num] < || dist[num] == INF)
printf ("?\n");
else
printf ("%d\n", dist[num]);
}
}
}
void init()
{
int i, j;
memset (Cin, false, sizeof(Cin));
for (i=; i<maxn; i++)
{
G[i].clear();
dist[i] = INF;
}
} int spfa ()
{
queue<int>Q;
bool vis[maxn];
int cnt[maxn];
memset (vis, false, sizeof(vis));
memset (cnt, , sizeof(cnt));
Q.push ();
cnt[] = ;
dist[] = ; while (!Q.empty())
{
int s = Q.front ();
Q.pop ();
vis[s] = false;
int len = G[s].size(); for (int i=; i<len; i++)
{
Edge x = G[s][i];
if (Cin[x.e])
continue;
if (dist[x.e] > dist[s] + x.w)
{
dist[x.e] = dist[s] + x.w;
if (!vis[x.e])
{
vis[x.e] = true;
Q.push (x.e);
cnt[x.e] ++;
if (cnt[x.e] == n)//只要x.e在负环内,则在负环内的点可以到达的点,都没有最短路径
dfs(x.e);
}
}
}
}
} void dfs (int u)
{
int len = G[u].size();
Cin[u] = true;
for (int i=; i<len; i++)//u后面的点都没有最短回路,都应该标记 {
if (!Cin[G[u][i].e])
dfs (G[u][i].e);
}
}
最新文章
- RandomAccessFile拆分合并文件
- 一些webGL的资源
- ACM 变态最大值
- bzoj2424 [HAOI2010]订货
- How Tomcat works — 四、tomcat启动(3)
- hdwiki 编码规范
- 【转】在delphi中实现控件的拖拽
- checkBox控件的CheckedChanged与CheckedStateChanged区别
- 一些ecplise 快捷键
- 【转】MSSQL获取指定表的列名信息,描述,数据类型,长度
- The Most Wanted Letter
- php数组排序
- vscode常用插件
- Deformable Convolutional Network
- 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
- python中对列表和循环使用的小练习
- ⑤NuPlayer播放框架之GenericSource源码分析
- BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]
- PHP:第四章——PHP数组array_diff计算数组差集
- POJ 1743 Musical Theme 【后缀数组 最长不重叠子串】
热门文章
- Maven创建项目时出现Generating project in Interactive mode就一直卡住的解决方案
- java比较两个日期大小
- Python遇到的零碎小问题
- 为经典版eclipse添加web and JavaEE插件
- Handlebars.js 中文文档
- poj2488--A Knight&;#39;s Journey(dfs,骑士问题)
- MVC+ZTree大数据异步树加载
- iPhone开发关于UDID和UUID的一些理解【转】
- mysql字段去重方式
- Object Query Language (OQL) query 基本使用