2013-01-23 22 views
0

我一直在使用STL一段時間,但今天我遇到了這個錯誤:錯誤而產生的std ::矢量對象C++

error: no class template named 'rebind' in 'class std::vector<int, std::allocator> >' 
下面的程序

#include <algorithm> 
#include <cstdio> 
#include <cmath> 
#include <cstring> 
#include <iostream> 
#include <map> 
#include <queue> 
#include <set> 
#include <string> 
#include <vector> 
#include <bitset> 
#include <climits> 
#include <stack> 
#include <cctype> 
#include <sstream> 
using namespace std; 

vector<int, vector<int> > G[2000005]; 
vector<int, vector<int> > Grev[2000005]; 
int f[2000005], order[2000005], leader[2000005], t = 0, parent = 0; 
bool explored[2000005]; 

void dfs_reverse(int i) { 
    explored[i] = true; 
    for(vi::iterator it=G[i].begin(); it != G[i].end(); it++) 
     if(!explored[*it]) 
      dfs_reverse(*it); 
    t++; 
    f[i] = t; 
} 

void dfs(int i) { 
    explored[i] = true; 
    leader[i] = parent; 
    for(vi::iterator it=G[i].begin(); it != G[i].end(); it++) 
     if(!explored[*it]) 
      dfs(*it); 
} 

int main() { 
    int N, i, j, u, v; 

    freopen("input.txt", "r", stdin); 
    freopen("output.txt", "w", stdout); 

    scanf("%d", &N); 
    for(i=0; i<N; i++) { 
     scanf("%d %d", &u, &v); 
     if(u > 0) { 
      if(v > 0) { 
       G[N + u].push_back(v); G[N + v].push_back(u); 
       Grev[v].push_back(N + u); Grev[u].push_back(N + v); 
      } else { 
       G[N + u].push_back(N - v); G[-v].push_back(u); 
       Grev[N-v].push_back(N+u); Grev[u].push_back(-v); 
      } 
     } else { 
      if(v > 0) { 
       G[-u].push_back(v); G[N + v].push_back(N - u); 
       Grev[v].push_back(-u); Grev[N-u].push_back(N+v); 
      } else { 
       G[u].push_back(N - v); G[-v].push_back(N - u); 
       Grev[N-v].push_back(u); Grev[N-u].push_back(-v); 
      } 
     } 
    } 

    memset(explored, false, 2000005*sizeof(bool)); 
    for(i=2*N; i>0; i--) { 
     if(!explored[i]) 
      dfs_reverse(i); 
     order[f[i]] = i; 
    } 

    memset(explored, false, 2000005*sizeof(bool)); 
    for(i=2*N; i>0; i--) { 
     if(!explored[order[i]]) { 
      parent = order[i]; 
      dfs(order[i]); 
     } 
    } 

    for(i=1; i<=N; i++) 
     if(leader[i] == leader[N+i]) 
      break; 

    if(i <= N) 
     printf("Unsatisfiable\n"); 
    else printf("Satisfiable\n"); 

    return 0; 
} 

我試圖用Kosaraju的雙通道算法來解決2SAT問題,以找到強連通的組件。基本上,我必須爲一個大圖(2000000個節點)分配內存。我正在用vector> G [2000005]做這件事,但它給了我上面提到的錯誤。我該如何解決這個錯誤?

回答

5

問題是vector<int, vector<int>。第二個模板參數, vector<int>沒有意義。你可能打算std::vector<std::pair<int, vector<int> >std::map<int, std::vector<int>

+0

傻我!我需要矢量 G [2000005]那裏。 –