codeforces Gym 101572 I 有向图最小环路径
题目链接 http://codeforces.com/gym/101572
题意 一共n个文件 存在依赖关系 根据给出的依赖关系 判断是否存在循环依赖 ,不存在的话输出SHIP IT,存在的话,打印最小的环,若有多个,输出其中任何一个。
解析 这道题其实很简单,最小的环无非就是自己到自己的最短路,直接把存在依赖的两个文件建立有向边(题意可看出),权值设为1,跑一遍Floyd,找出自己到自己最短路最小的那个点,输出它的路径。但是输入有点恶心,感觉在搞事情,处理一下就好了。
AC代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = ;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const double epx = 1e-;
typedef long long ll;
int n,m;
int w[maxn][maxn];
int path[maxn][maxn];
string s[maxn];
void init()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
w[i][j]=inf; //有向图自己到自己要初始化为inf
path[i][j]=j;
}
}
}
void Floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(w[i][k]!=inf&&w[k][j]!=inf)
{
int temp=w[i][k]+w[k][j];
if(w[i][j]>temp)
{
w[i][j]=temp;
path[i][j]=path[i][k];
}
}
}
void input()
{
cin>>n;
init();
map<string,int> ma;
for(int i=;i<=n;i++)
{
cin>>s[i];
ma[s[i]]=i; //给每个文件名字编号
}
string name1,name2,imp;
int k;
for(int i=;i<=n;i++)
{
cin>>name1>>k; //文件名,k个import
for(int i=;i<k;i++)
{
cin>>imp; //import
getline(cin,name2); //读取import后面的字符串 直接读入了一行。。。其他操作也可以
string temp;
int j=;
for(int i=;i<name2.length();i++) //开始处理字符串 因为把import后面的空格也读进来了,所以从1开始
{
if(name2[i]==',')
{
temp=name2.substr(j,i-j); //取子串,substr(pos,n)从pos开始,截取n个字符
j=i+;
i++;
int u=ma[name1],v=ma[temp];
w[u][v]=; //建单向边
}
else if(i==name2.length()-) //最后一个单独处理
{
temp=name2.substr(j,i-j+);
int u=ma[name1],v=ma[temp];
w[u][v]=;
}
}
//cout<<imp<<" "<<name2<<endl;
}
}
}
void print()
{
int mind=inf;
int sta,en;
for(int i=;i<=n;i++)
{
if(w[i][i]<mind)
sta=en=i,mind=w[i][i]; //找最小的环
}
if(mind!=inf)
{
cout<<s[sta];
int u=path[sta][en];
while(u!=en)
{
cout<<" "<<s[u];
u=path[u][en];
}
cout<<endl;
}
else
cout<<"SHIP IT"<<endl;
}
int main()
{
input();
Floyd();
print();
}
codeforces Gym 101572 I 有向图最小环路径的更多相关文章
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
- CodeForces Gym 100213F Counterfeit Money
CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- GYM 101572I(有向图上最小环)
逗号空格是假的,全都直接连边就行. 提供一个迪杰n次的图上最小环板子. #include <cstdio> #include <cstring> #include <io ...
随机推荐
- spring中常用的注解
使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package ...
- Bootstrap历练实例:块级按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- mysql 特定查询条件下导致的大海捞针
order表: order type gmt_create type 取值: 0,1 其中0非常多,1非常少. 当查询条件里 select * from order where type=0 an ...
- 智能指针之 weak_ptr
1. weak_ptr 介绍 std::weak_ptr 是一种智能指针,它对被 std::shared_ptr 管理的对象存在非拥有性("弱")引用.在访问所引用的对象指针前必须 ...
- windows下pycharm使用Anaconda安装包环境
转自: https://www.cnblogs.com/heitaoq/p/8632315.html
- 对Fiddler设置【Decrypt HTTPS traffic】后火狐浏览器打开https【您的连接并不安全】的解决方法
火狐浏览器在打开https页面的时候出现[您的连接并不安全]的提示页面: 在设置Fiddler的HTTPS解密的时候,会对下面图中的红线框的选项点击一次生成一个Fiddler 根证书在桌面上: 点击火 ...
- redis集群理解
Redis在3.0中也引入了集群的概念,用于解决一些大数据量和高可用的问题,但是,为了达到高性能的目的,集群不是强一致性的,使用的是异步复制,在数据到主节点后,主节点返回成功,数据被异步地复制给从节点 ...
- (41)zabbix监控api接口性能及可用性 天气预报api为例
现在各种应用都走api,例如淘宝,天气预报等手机.pad客户端都是走api的,那么平时也得对这些api做监控了.怎么做呢?zabbix的web监控是不二选择了.今天就以天气预报api作为一个例子. 天 ...
- 【js】【ios】【safari】【兼容问题】【转发】JS IOS/iPhone的Safari不兼容Javascript中的Date()问题
引用地址:http://www.cnblogs.com/yiven/p/6053872.html 1 var date = new Date('2016-11-11 11:11:11'); 2 d ...
- 【php】子类覆盖超类方法,在超类里调用此方法会出现何种现象
<?php class A { public function getName() { echo $this->name(); } function name () { return 'l ...