Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #define ll long long
- bool GB(ll m, ll x)
- {
- return ((m) & (1LL << (x)));
- }
- void SB(ll &m, ll x)
- {
- m = ((m) | (1LL <<(x)));
- }
- using namespace std;
- struct Equipo
- {
- ll a, b, c;
- };
- struct Grafo
- {
- vector <Equipo> v;
- map<string, int> mapa;
- int id(string a)
- {
- if(mapa[a] == 0)
- mapa[a] = mapa.size();
- return mapa[a];
- }
- int maxCant;
- void solve(int i, int c, ll s)
- {
- maxCant = max(maxCant, c);
- if(i >= v.size())
- return;
- ///Ver si el equipo i puede participar
- solve(i+1, c, s);
- if(!GB(s, v[i].a) && !GB(s, v[i].b) && !GB(s, v[i].c)) ///Si puede participar
- {
- SB(s, v[i].a);
- SB(s, v[i].b);
- SB(s, v[i].c);
- solve(i+1, c+1, s);
- }
- }
- void leer()
- {
- int n;
- cin >> n;
- v = vector <Equipo> (n);
- string sa, sb, sc;
- for(int i=0; i<n; i++)
- {
- cin >> sa >> sb >> sc;
- v[i].a = id(sa)-1;
- v[i].b = id(sb)-1;
- v[i].c = id(sc)-1;
- }
- ///Probar todas las combinaciones!! :D
- maxCant = 0;
- ll z = 0;
- solve(0, 0, z);
- cout << maxCant << endl;
- }
- };
- int main()
- {
- Grafo g;
- g.leer();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment