Submission #333707

#TimeUsernameProblemLanguageResultExecution timeMemory
333707dooweyPraktični (COCI18_prakticni)C++14
130 / 130
136 ms18284 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

const int N = (int)1e5 + 10;
const int LOG = 31;

ll vl[N];
vector<pii> T[N];

ll xr[N];

bool vis[N];
int dep[N];

vector<pii> xar;
int xorval;

void dfs(int u, int pp){
    vis[u]=true;
    for(auto x : T[u]){
        if(vis[x.fi]){
            if(dep[u] - dep[x.fi] >= 2){
                xorval = (xr[u]^xr[x.fi]^vl[x.se]);
                if(xorval != 0)
                    xar.push_back(mp(x.se, xorval));
            }
        }
        else{
            dep[x.fi] = dep[u]+1;
            xr[x.fi] = xr[u]^vl[x.se];
            dfs(x.fi, u);
        }
    }
}

int main(){
    fastIO;
    //freopen("in.txt", "r", stdin);
    int n, m;
    cin >> n >> m;
    int u, v;
    for(int i = 1; i <= m ; i ++ ){
        cin >> u >> v >> vl[i];
        T[u].push_back(mp(v,i));
        T[v].push_back(mp(u,i));
    }
    for(int i = 1; i <= n; i ++ ){
        if(!vis[i]){
            dfs(i,-1);
        }
    }
    vector<int> nums;
    vector<vector<int>> sol;
    int idx = -1;
    int cur;
    for(int i = 0 ; i < LOG; i ++ ){
        idx = -1;
        for(int j = 0 ; j < xar.size(); j ++ ){
            if((xar[j].se & (1 << i)))
                idx = j;
        }
        if(idx == -1) continue;
        cur = xar[idx].se;
        nums.push_back(cur);
        sol.push_back({});
        for(int j = 0 ; j < xar.size(); j ++ ){
            if((xar[j].se & (1 << i))){
                xar[j].se ^= cur;
                sol.back().push_back(xar[j].fi);
            }
        }
    }
    cout << nums.size() << "\n";
    for(int i = 0 ;i  < nums.size(); i ++ ){
        cout << nums[i] << " ";
        cout << sol[i].size() << " ";
        for(auto x : sol[i]) cout << x << " ";
        cout << "\n";
    }
    return 0;
}

Compilation message (stderr)

parkticni.cpp: In function 'int main()':
parkticni.cpp:67:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |         for(int j = 0 ; j < xar.size(); j ++ ){
      |                         ~~^~~~~~~~~~~~
parkticni.cpp:75:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |         for(int j = 0 ; j < xar.size(); j ++ ){
      |                         ~~^~~~~~~~~~~~
parkticni.cpp:83:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |     for(int i = 0 ;i  < nums.size(); i ++ ){
      |                    ~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...