Ranking (as of 2014-11-30): 151 out of 524
Language: C++
/*
UVa 11902 - Dominator
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_11902_Dominator.cpp
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void dfs(int i, int excluded, const vector< vector<int> >& edges,
vector<bool>& visited)
{
if (i != excluded) {
visited[i] = true;
const vector<int>& es = edges[i];
for (size_t j = 0, k = es.size(); j < k; j++)
if (!visited[es[j]])
dfs(es[j], excluded, edges, visited);
}
}
int main()
{
int t;
cin >> t;
for (int case_nr = 1; case_nr <= t; case_nr++) {
int n;
cin >> n;
vector< vector<int> > edges(n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
int k;
cin >> k;
if (k)
edges[i].push_back(j);
}
vector<bool> visited_from_start(n, false);
dfs(0, -1, edges, visited_from_start);
vector< vector<bool> > relationships(n, vector<bool>(n, false));
for (int i = 0; i < n; i++)
if (visited_from_start[i]) {
vector<bool> visited(n, false);
dfs(0, i, edges, visited);
for (int j = 0; j < n; j++)
if (visited_from_start[j] && !visited[j])
relationships[i][j] = true;
}
cout << "Case " << case_nr << ":\n";
string separator = '+' + string(2 * n - 1, '-') + "+\n";
cout << separator;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
cout << '|' << ((relationships[i][j]) ? 'Y' : 'N');
cout << "|\n" << separator;
}
}
return 0;
}
No comments:
Post a Comment