题目链接 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 有向图最小环路径的更多相关文章

  1. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  2. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  3. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  4. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  5. 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 ...

  6. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  7. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  8. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  9. GYM 101572I(有向图上最小环)

    逗号空格是假的,全都直接连边就行. 提供一个迪杰n次的图上最小环板子. #include <cstdio> #include <cstring> #include <io ...

随机推荐

  1. springboot-i18n国际化

    简介 In computing, internationalization and localization are means of adapting computer software to di ...

  2. thinkphp网站后门-发现后门(Webshell)文件

    不知道能不能解决, 1.登录阿里云后台,找到后门文件删除 2.执行 中国镜像 composer config -g repo.packagist composer https://packagist. ...

  3. 监控linux各主机系统时间是否一致

    #!/bin/bashSTATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3PASSWD='**************'print_h ...

  4. assign, retain, copy, weak, strong

    一.assign, retain, copy 的区别(引用计数 RC reference count) 参考:IOS基础:retain,copy,assign及autorelease 1. 假设你用m ...

  5. ios开发--常用的高效开发的宏

    本次在做项目的时候使用了下面的一些宏定义 以及 建立宏定义的一些规则.虽然只用了其中的一点点,但是还是极大的提高了开发效率.. 将这些宏放到一个头文件里然后再放到工程中,在需要使用这些宏定义的地方体检 ...

  6. CSS3的渐变-gradient

    CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). CSS3的线性渐变 一.线性渐变在Mozilla下的应用 语法: -moz-li ...

  7. TSOJ--方格上的路径

    题目描述: 试求 n × m 的方格图形中,从点 (0, 0) 到点 (n, m) 的最短路径数目. 输入描述: 有多组测试数据.输入的第一行为一个正整数 N,表示接下来有 N 组测试数据. 在接下来 ...

  8. Java线程和多线程(三)——线程安全和同步

    线程安全在Java中是一个很重要的课题.Java提供的多线程环境支持使用Java线程.我们都知道多线程共享一些对象实例的话,可能会在读取和更新共享数据的事后产生数据不一致问题. 线程安全 之所以会产生 ...

  9. Java-字符串大小写转换

    package com.tj; public class MyClass implements Cloneable { public static void main(String[] args) { ...

  10. Scrapy应用之抓取《宦海沉浮》小说

    目标站点   http://www.shushu8.com/huanhaichenfu/ 第一步:新建项目 KeysdeMacBook:Desktop keys$ scrapy startprojec ...