I can’t find error in my approach for SPOJ Paradox problem. Problem Link
My Solution:
int status[105][2];
int dfs(int node,bool *visited,bool *conclusion)
{
bool a = conclusion[node];
bool b = (bool) status[node][1];
bool c = !(a^b);
if(visited[status[node][0]]==true)
{
if(conclusion[status[node][0]] == c)
{
return 1;
}
else return 0;
}
conclusion[status[node][0]]= c;
visited[status[node][0]] = true;
dfs(status[node][0],visited,conclusion);
}
int main()
{
std::ios::sync_with_stdio(false);
while(1)
{
int n;cin>>n;
if(n==0)
return 0;
REP(i,n)
{
int temp; cin>>temp;
string s; cin>>s;
status[i][0]=temp-1;
if(s=="true") status[i][1]=1;
else status[i][1]=0;
}
bool visited[105]={false};
bool conclusion[105]={false};
conclusion[0]=true;
visited[0]=true;
bool res = dfs(0,conclusion,visited);
if(res) cout<<"NOT PARADOX"<<endl;
else cout<<"PARADOX"<<endl;
}
}