Import Spaghetti
来源:互联网 发布:app的运营数据分析 编辑:程序博客网 时间:2024/06/14 17:56
题意:给你一个有向图,输出其中的最小环
解题思路:数据只有500,暴力即可
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <queue>#include <vector>#include <bitset>#include <functional>using namespace std;#define LL long longconst int INF = 0x3f3f3f3f;map<string,int> mp;char ch[100010], name[505][10], s[20];int f[505],nt[250009],e[250009];int n,cnt,x;int p[510],dis[510];int bfs(int root){ memset(dis, INF, sizeof dis); bool flag = true; queue<int> q; q.push(root); while(!q.empty()) { int pre = q.front(); q.pop(); if(pre==root) { if(!flag) return dis[root]; else flag = false; } for(int i=f[pre]; ~i; i=nt[i]) { int temp; if(pre==root) temp = 1; else temp = dis[pre] + 1; if(dis[e[i]] > temp) { q.push(e[i]); dis[e[i]] = temp; } } } return INF;}int main(){ while(~scanf("%d",&n)) { cnt=0; memset(f,-1,sizeof f); mp.clear(); for(int i=1; i<=n; i++) { scanf("%s",name[i]); mp[name[i]] = i; } for(int i=1; i<=n; i++) { scanf("%s%d",name[i],&x); for(int j=1; j<=x; j++) { scanf("%s",ch); getchar(); gets(ch); int tot = 0; int len = strlen(ch); for(int k=0; k<len; k++) { if(ch[k] == ',') { s[tot] = '\0'; nt[cnt]=f[mp[s]],f[mp[s]]=cnt,e[cnt++]=i; k++; tot=0; } else s[tot++]=ch[k]; } s[tot]='\0'; nt[cnt]=f[mp[s]],f[mp[s]]=cnt,e[cnt++]=i; } } int pos = -1, mi = INF; for(int i=1; i<=n;i++) { int temp = bfs(i); if(temp < mi) { mi = temp; pos = i; } } if(mi == INF) { printf("SHIP IT\n"); continue; } queue<int> q; q.push(pos); memset(dis, INF, sizeof dis); while(!q.empty()) { int pre = q.front(); q.pop(); int flag=0; for(int i=f[pre]; ~i; i=nt[i]) { int temp; if(pre == pos) temp = 1; else temp = dis[pre] + 1; if(dis[e[i]] > temp) { p[e[i]] = pre; q.push(e[i]); dis[e[i]] = temp; } if(e[i] == pos) { p[pos] = pre; flag=1; break; } } if(flag) break; } int temp = pos; while(p[temp] != pos) { printf("%s ",name[p[temp]]); temp = p[temp]; } printf("%s\n",name[pos]); } return 0;}
阅读全文
0 0
- Import Spaghetti
- Import Spaghetti
- Gym 101572 I.Import Spaghetti【Floyd最小环+输出路径】
- Spaghetti Squash
- Spaghetti扫描器源码分析之指纹识别
- Spaghetti扫描器源码分析之爬虫模块
- Spaghetti扫描器源码分析之发现模块
- import
- import
- import
- import
- import
- import
- #import
- import
- #import
- #import
- @import
- M
- android okhttp3框架使用
- pc端和手机端禁用滚动条
- linux获取目录下文件 包含子目录
- Qt 数据库模型(QSqlQueryModel,QSqlTableModel)获取模型中的所有数据
- Import Spaghetti
- 中山市选2008 小树 题解
- Dragger2的原理
- Git使用宝典
- HDUOJ1312Red and Black(BFS)
- 编辑框Edit_列表框ListBox_组合框ComBox默认内容设置以及获取IP控件内容
- MyBatis之注解开发-yellowcong
- 算法第12周Regular Expression Matching[hard]
- 利用python多线程更新数据