GYM 101572I(有向图上最小环)
逗号空格是假的,全都直接连边就行。
提供一个迪杰n次的图上最小环板子。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
const int maxn = 505;
const int inf = 0x3f3f3f3f;
typedef pair<int, int> pii;
int n;
string s[maxn];
string t;
int cnt;
map<string, int> id;
vector<int> adj[maxn];
int dis[maxn], pre[maxn], Ans[maxn];
int ans = inf, final;
int vis[maxn];
int dij(int st) {
memset(pre, 0, sizeof pre);
memset(dis, 0x3f, sizeof dis);
priority_queue<pii, vector<pii>, greater<pii> > Q;
for (int i : adj[st]) {
Q.push({1, i});
dis[i] = 1;
pre[i] = st;
}
while (!Q.empty()) {
int d = Q.top().first, u = Q.top().second;
Q.pop();
if (d > dis[u]) continue;
for (int i : adj[u]) {
if (dis[i] > dis[u] + 1) {
dis[i] = dis[u] + 1;
pre[i] = u;
if (i == st) return dis[i];
Q.push({dis[i], i});
}
}
}
return dis[st];
}
void print(int cur) {
if (vis[cur]) return;
vis[cur] = 1;
print(Ans[cur]);
cout << s[cur] << " ";
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s[i];
id[s[i]] = i;
}
for (int i = 1; i <= n; i++) {
cin >> t >> cnt;
int u = id[t];
for (int j = 0; j < cnt; j++) {
cin >> t;
getline(cin, t);
t.erase(0, 1);
string tmp = "";
for (int aa = 0; aa < t.length(); aa++) {
if (t[aa] != ',') {
tmp += t[aa];
} else {
int v = id[tmp];
adj[u].push_back(v);
aa++;
tmp = "";
}
}
if (tmp != "") {
int v = id[tmp];
adj[u].push_back(v);
}
}
}
for (int i = 1; i <= n; i++) {
int tmp = dij(i);
if (ans > tmp) {
ans = tmp;
final = i;
memcpy(Ans, pre, sizeof pre);
}
}
if (ans == inf) {
puts("SHIP IT");
} else {
print(final);
}
}
GYM 101572I(有向图上最小环)的更多相关文章
- HIT 2739 - The Chinese Postman Problem - [带权有向图上的中国邮路问题][最小费用最大流]
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2739 Time limit : 1 sec Memory limit : 64 M A Chinese ...
- 【Floyd算法】Gym - 101572I - Import Spaghetti
题意:有向图最小环,输出方案. #include<cstdio> #include<iostream> #include<string> #include<a ...
- 非负权值有向图上的单源最短路径算法之Dijkstra算法
问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...
- Codeforces 183C(有向图上的环长度)
因为公用一个系统所以大家求gcd:衡量各点之间的拓扑位置,如果到达同一点有不同的长度则取gcd. #include <cstdio> #include <cstring> #i ...
- 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链
luogu 1477 [NOI2008] 假面舞会 容易发现: 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) . 如果有环,则面具种数一定是所有环的大小的最大公约数. ...
- poj1734 Sightseeing trip【最小环】
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions:8588 Accepted:3224 ...
- 关于Floyd求解最小环的问题
最近学习了floyd的奇妙用处,求解最小环,自己的领悟写在了纸上. 对于一个最小环,显然至少要包含三个点(此处不把两个点的回路称之为环) 从大体上考虑的话,一定有一个点与左右两侧的点是直接连接的(即不 ...
- 解析·NOIP·冷门 CLZ最小环
赐予我力量,去改变我所能改变的;赐予我勇气,去接受我不能改变的;并赐予我智慧,去分辨这两者. -----安东尼达斯 NOIP的图论题中有一部分是跟图上的环有关的.蒟蒻的我在USACO上刷题时发现了一种 ...
- Codeforces Gym 100431A Achromatic Number 欧拉回路
原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...
随机推荐
- 时尚创意VI矢量设计模板
时尚创意VI矢量设计模板 创意VI VI设计 企业VI 时尚背景 信封设计 封面设计 杯子 桌旗 帽子 EPS矢量素材下载 http://www.huiyi8.com/vi/
- Android窗口系统第一篇---Window的类型与Z-Order确定
Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...
- 强制浏览器下载PDF文件
if(empty($filename)) { return FALSE; } // http headers header('Content-Type: application-x/force-dow ...
- JavaScript中函数的无限次运算问题
开博客有一段时间了,一直没动笔,原因是确实没看到什么值得写的内容.直到今天在司徒正美的博客里看到一个问题. http://www.cnblogs.com/rubylouvre/archive/2012 ...
- MySQL_杭州11月1-29号在线产品在线天数、销售天数_20161129
杭州11月1-29号在线产品在线天数.销售天数 1.产品在这个时间段内的每一天的在线情况,然后聚合计算每个产品的在线天数,每一天的在线情况 如果在线记为1,不在线为null 2.计算每个产品在这个时间 ...
- BZOJ_4025_二分图_线段树按时间分治+并查集
BZOJ_4025_二分图_线段树按时间分治+并查集 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简 ...
- ACM学习历程—HDU5410 CRB and His Birthday(动态规划)
Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son ...
- VirtualBox文件系统已满--磁盘扩容
第1步:为virtualbox虚拟电脑扩容 进入命令行,以Windows系统为例 (特别注意空格和中文) 1.启动CMD命令行,进入VirtualBox的安装目录.如 运行:cmd C:\Users\ ...
- NFS安装
安装应用 yum install -y nfs-utils rpcbind 服务器端: 1.启动服务 service nfs start service rpcbind start 2. 编辑 ...
- AtCoder Grand Contest 009 E:Eternal Average
题目传送门:https://agc009.contest.atcoder.jp/tasks/agc009_e 题目翻译 纸上写了\(N\)个\(1\)和\(M\)个\(0\),你每次可以选择\(k\) ...