UVA 10731Test (scc)
来源:互联网 发布:淘宝无响应是怎么回事 编辑:程序博客网 时间:2024/05/22 10:29
题意:
求最少的集合个数,使得集合内元素都是冲突的,有序输出
分析:
都冲突就是都相互可达嘛,有向图就是scc咯,然后用string排序输出
代码:
//// Created by TaoSama on 2015-11-08// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 26, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int n;vector<int> G[N];int dfn[N], low[N], in[N], stk[N], top, dfsNum, scc;string ans[26];void tarjan(int u) { low[u] = dfn[u] = ++dfsNum; in[u] = true; stk[++top] = u; for(auto v : G[u]) { if(!dfn[v]) { tarjan(v); low[u] = min(low[u], low[v]); } else if(in[v]) low[u] = min(low[u], dfn[v]); } if(low[u] == dfn[u]) { ans[++scc] = ""; while(true) { int v = stk[top--]; in[v] = false; ans[scc] += char(v + 'A'); if(v == u) break; } sort(ans[scc].begin(), ans[scc].end()); }}bool vis[26];void init() { top = scc = dfsNum = 0; memset(dfn, 0, sizeof dfn); memset(low, 0, sizeof low); memset(in, 0, sizeof in); memset(vis, 0, sizeof vis); for(int i = 0; i < 26; ++i) G[i].clear();}int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int kase = 0; while(scanf("%d", &n) == 1 && n) { init(); char buf[10][2]; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= 6; ++j) scanf("%s", buf[j]); int u = buf[6][0] - 'A', v; vis[u] = true; for(int j = 1; j <= 5; ++j) { v = buf[j][0] - 'A'; vis[v] = true; if(v == u) continue; G[u].push_back(v); } } for(int i = 0; i < 26; ++i) if(vis[i] && !dfn[i]) tarjan(i); sort(ans + 1, ans + 1 + scc); if(kase++) puts(""); for(int i = 1; i <= scc; ++i) for(int j = 0; j < ans[i].size(); ++j) printf("%c%c", ans[i][j], " \n"[j == ans[i].size() - 1]); } return 0;}
0 0
- UVA 10731Test (scc)
- uva 11504 - Dominos (scc)
- UVA 11324 The Largest Clique(SCC+DP)
- UVA 11324 The Largest Clique(SCC+dp)
- UVA 11324 - The Largest Clique(SCC缩点 + DP)
- tarjan(SCC)模板
- SCC
- UVA 11691 Allergy Test(状压dp)
- 图论 SCC(CCF高速公路)
- UVAlive4287 Proving Equivalences(scc)
- 消息传递(最小SCC)
- uva 11324 最大团 (SCC缩点+DP)
- [UVA 11324]The Largest Clique[SCC][缩点]
- UVA 11324 scc缩点+树上最长路
- UVa 416 - LED Test
- 强连通分量SCC模版(LRJ)
- HDU 1269 迷宫城堡 (tarjan scc)
- HDU 2767 Proving Equivalences (tarjan scc)
- Error: Can't connect to MySQL server on 'localhost' (10061) Errno.: 2003
- UITableView缓存池 重用
- 关于iOS中git和github的使用
- 《三分》hdoj acm 4.1.6 三分两次
- 推荐系统导论笔记(三)——Assignment 1
- UVA 10731Test (scc)
- 《二分》hdoj acm 4.1.5
- Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP (转自博客园)
- 2015年11月12日
- struts2整合CKEditor和CKFinder实现上传
- Hue功能总结
- 探索出的一条适合自己的opencv配置之路
- YARN和HDFS的调用方式汇总
- UVA 11159Factors and Multiples (最大独立集)