- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决 http://www.spoj.com/problems/BOTTOM/
以下是我要执行的步骤:
1) 使用 Kosaraju 算法找到强连通分量。 2) 考虑一个强连接的组件。考虑一条边 u。现在考虑从 u 到某个顶点 v 的所有边。如果 v 位于某个其他 SCC 中,则消除整个强连接分量。否则包括解决方案中的所有元素。
但是,我不断地得到 WA。请帮忙。
这是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
#include <iterator>
#include <queue>
using namespace std;
int k = 0;
int V, E;
bool fix[5001];
bool fix2[5001];
int compNum[5001];
void dfs(int v, vector< vector<int> >&G, bool *fix, vector <int> &out) {
fix[v] = true;
for (int i = 0; i < G[v].size(); i++) {
int u = G[v][i];
if (!fix[u]) {
fix[u] = true;
dfs(u, G, fix, out);
}
}
out.push_back(v);
}
void dfs2(int v, vector< vector<int> >&G, bool *fix2, vector < vector<int> > &components) {
fix2[v] = true;
for (int i = 0; i < G[v].size(); i++) {
int u = G[v][i];
if (!fix2[u]) {
fix2[u] = true;
dfs2(u, G, fix2, components);
}
}
components[k].push_back(v);
compNum[v] = k;
}
int main() {
int a, b;
while (true) {
cin >> V; if (V == 0) break; cin >> E;
vector< vector<int> >G(V + 1);
vector< vector<int> >G2(V + 1);
vector<int>out;
vector < vector<int> >components(V + 1);
for (int i = 0; i < E; i++) {
cin >> a >> b;
G[a].push_back(b);
G2[b].push_back(a);
}
for (int i = 1; i <= V; i++) {
if (!fix[i])
dfs(i, G, fix, out);
}
reverse(out.begin(), out.end());
for (int i = 0; i < out.size(); i++){
if (!fix2[out[i]]) {
dfs2(out[i], G2, fix2, components);
k++;
}
}
vector<int>gamotana;
for (int i = 0; i < components.size(); i++) {
for (int j = 0; j < components[i].size(); j++) {
bool check = true;
for (int z = 0; z < G[components[i][j]].size(); z++)
{
if (compNum[G[components[i][j]][z]] != i)
{
check = false; goto next123;
}
}
if (check)
gamotana.push_back(components[i][j]);
}
next123:;
}
sort(gamotana.begin(), gamotana.end());
for (int i = 0; i < gamotana.size(); i++)
cout << gamotana[i] << " ";
for (int i = 0; i < 5001; i++) {
fix[i] = false;
fix2[i] = false;
compNum[i] = -1;
}
k = 0;
cout << endl;
}
return 0;
}
最佳答案
在您的算法描述中,您说如果某条边通向不同的组件,您将消除整个连接的组件。
但是,在您的代码中,您似乎将组件 i 中的所有顶点 j 添加到您的解决方案中,直到找到引出的边。换句话说,即使组件不是汇点,您仍然可能会错误地将某些顶点报告为汇点。
我想你应该做更像这样的事情:
for (int i = 0; i < components.size(); i++) {
for (int j = 0; j < components[i].size(); j++) {
for (int z = 0; z < G[components[i][j]].size(); z++)
{
if (compNum[G[components[i][j]][z]] != i)
{
goto next123;
}
}
}
for (int j = 0; j < components[i].size(); j++)
gamotana.push_back(components[i][j]);
next123:;
}
当然,可能还有更多的问题。我会建议您首先尝试构建和测试一些小示例,然后可能会针对强力求解器进行测试以识别失败案例。
关于c++ - Kosaraju 的 spoj 底部算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22720473/
以下是 SPOJ GCD2 的代码.它在我的机器和 Ideone 上运行良好,但在 SPOJ 上出现运行时错误 (SIGFPE)。我已经检查了 spojtoolkit.com 上也提供的所有测试用例。
如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为回文。给定一个不超过1000000位的正整数K,写出大于K的最小回文的值输出。显示的数字始终不带前导零。 输入 第一行包含整数 t,
我一直在努力解决这个问题 SPOJ www.spoj.com/problems/PRHYME/?几天了,但没有成功。这是问题的简要说明: Given is a wordlist L, and a
我是编码初学者。我在向 spoj 提交质数生成代码时收到 NZEC 错误。但代码在我的桌面上运行得很好。请帮助我。这就是我编写的代码。 import java.util.*; import java.
#include #include #include main() { int n, m, i, j, k; char a[100], b[100]; scanf("%d
我遇到了一个问题 SPOJ . 我检查了所有通过所有测试用例,但我仍然在 spoj 上得到“WA”。 我知道它可以使用动态编程来解决,但我正在练习内存。 这是我的代码: #include #inclu
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
有关确切的问题,请参阅此 link 这里我定义了三个函数,将它们相互调用。函数调用尚未完成 #include int primegen(int x1,int x2); int isprime(int
Peter 想生成一些 prime numbers对于他的密码系统。帮助他!您的任务是生成两个给定数字之间的所有素数! 输入 输入以单行中测试用例的数量t开始(t int main() {
http://www.spoj.com/problems/FCTRL2/ 我的代码在 Spoj 中显示编译错误,尽管在我的编译器中运行准确。 **IDE - 代码块 ** int cal(int );
我正在尝试将我的代码提交给 SPOJ 上的“小阶乘”问题。它在我的 IDE 上成功运行,但在 SPOJ 上显示运行时错误 (NZEC)。请提出解决方案。 import java.util.Scanne
我正在尝试解决 SPOJ 中的下一个回文问题。我在下面的 Java 代码中收到超出时间限制的错误。 “如果一个正整数在十进制中从左到右和从右到左读的表示相同,则称为回文。对于给定不超过 1000000
我在 spoj 上解决了一个名为 Ambiguous Permutations(http://www.spoj.com/problems/PERMUT2/)的简单问题,当我测试小输入时它工作正常,但在
我正在尝试关于 SPOJ 的问题,其中我们必须简单地找到 Longest Increasing Sub-sequence 的长度给定数组 A. 我使用动态规划 O(n^2) 算法解决了这个问题,解决方
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我刚开始接触竞争性编程。我有点坚持这个素数。 SPOJ 上的生成器问题。代码在 GeeksforGeeks IDE 上运行良好,但在 SPOJ 上它会出现运行时错误。问题是这样的: Peter 想为他
好吧,这让我发疯了。我在 spoj 上解决了一个名为 MIXTURES ( http://www.spoj.com/problems/MIXTURES/) 的问题。我不知道为什么我总是遇到段错误。该问
我已经为下一个回文问题编写了一个蛮力解决方案,并希望获得 Time Limit Exceeded 。但是当我测试了一些测试用例时它工作正常但是当我在 spoj 中提交代码时我得到了错误的答案。这是我的
我正在尝试解决 NGON问题。我在这里使用自下而上的动态编程。递归函数为: f(a,b) = f(a-1,b) + f(a-1,b-1)*ai +f(a-1,b-2)*ai*(ai-1)/2, a>0
我正在解决这个 spoj 问题。 http://www.spoj.com/problems/MAXSUB/我所有的测试用例都正常工作,但我在 spoj 中得到了错误的答案。我试图改变我的代码很多但仍然
我是一名优秀的程序员,十分优秀!