Loading

代码-CF780F Axel and Marston in Bitland

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);i>=0;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;

//Data
const int N=500,D=61;
const ll M=1e18;
int n,m;

//Matrix
struct Matrix{
    bitset<N> row[N],col[N];
    bool get(int i,int j){return row[i][j];}
    void set(int i,int j){row[i].set(j),col[j].set(i);}
    Matrix friend operator*(Matrix p,Matrix q){
        Matrix res;
        R(i,n)R(j,n)if((p.row[i]&
            q.col[j]).any()) res.set(i,j);
        return res;
    }
}e[D][2],now;

//Main
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>m;
    R(i,m){
        int u,v,w;
        cin>>u>>v>>w,--u,--v;
        e[0][w].set(u,v);
    }
    R(i,D-1) e[i+1][0]=e[i][0]*e[i][1],
        e[i+1][1]=e[i][1]*e[i][0];
    if(e[D-1][0].row[0].any()) cout<<-1<<'\n',exit(0);
    int t=0; ll ns=0; now.set(0,0);
    L(i,D)if((now*e[i][t]).row[0].any())
        now=now*e[i][t],t^=1,ns+=1ll<<i;
    if(ns>M) cout<<-1<<'\n',exit(0);
    cout<<ns<<'\n';
    return 0;
}
posted @ 2020-11-27 14:50  George1123  阅读(32)  评论(0编辑  收藏  举报