Pagini recente » Cod sursa (job #289751) | Cod sursa (job #1070747) | Cod sursa (job #1467196) | Cod sursa (job #1423718) | Cod sursa (job #795066)
Cod sursa(job #795066)
#include<fstream>
#include<iostream>
#include<ctime>
using namespace std;
clock_t start=clock();
ifstream f("balanta.in");
ofstream g("balanta.out");
int N, M;
int sh[1030];
int sl[1030];
int A[1030], B[1030];
void diff(int n, int *shl, int *a, int *b)
{ int i;
for(i = 1; i <= n; i++)
{ if(shl[a[i]]) shl[0]--;
shl[a[i]] = 0;
if(shl[b[i]]) shl[0]--;
shl[b[i]] = 0;
}
}
void intersec(int n, int *shl, int *a)
{ int i;
int aux[1030];
for(i = 0; i <= N; i++) aux[i] = shl[i], shl[i] = 0;
for(i = 1; i <= n; i++)
if(aux[a[i]])
{ shl[a[i]] = 1;
shl[0]++;
}
}
int unic(int *shl)
{ for(int i = 1; i <= N; i++)
if(shl[i]) return i;
return 0;
}
int main()
{ int i, j, k, v;
int ans = 0;
f>>N>>M;
for(i = 1; i <= N; i++)
sh[++sh[0]] = sl[++sl[0]] = 1;
for(i = 1; i <= M; i++)
{ f>>k;
for(j = 1; j <= k; j++)
f>>A[j];
for(j = 1; j <= k; j++)
f>>B[j];
f>>v;
if(v == 0)
{ diff(k, sh, A, B);
diff(k, sl, A, B);
}
if(v == 1)
{ intersec(k, sh, A);
intersec(k, sl, B);
}
if(v == 2)
{ intersec(k, sh, B);
intersec(k, sl, A);
}
}
if(sh[0] == 1 && sl[0] == 0)
ans = unic(sh);
if(sh[0] == 0 && sl[0] == 1)
ans = unic(sl);
g<<ans;
cout << 1.0*(clock()-start)/(1.0*CLOCKS_PER_SEC) << '\n';
f.close();
g.close();
return 0;
}