【数位贪心】
【数位贪心】
十进制/二进制填数字
一般是从高位到低位考虑->继承
Minimum OR Path
https://atcoder.jp/contests/abc408/tasks/abc408_e
/*【贪心】最高位为0,次高位为0,...->从高位扫到低位 并继承高位的结果
【位数】设S:S中若存在i:所存在的边,第i位一定全是0
->从高位到低位:继承上一次的S,并把当位设成1(满足条件)
->如果能跑到n:说明该位是可以的 否则ans该位设为1
*/
const int N=2e5+10;
int n,m;
vector<PII> g[N];
bool st[N];
void dfs(int u,int fa,int x){
st[u]=1;
for(auto son:g[u]){
int pos=son.first;
int val=son.second;
if(pos!=fa){ //该位及以前继承的位全为0
if(!st[pos] && !(val&x)) dfs(pos,u,x);
}
}
}
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
int s=0,ans=0;
for(int i=29;i>=0;i--){
memset(st,0,sizeof st);
dfs(1,-1,s|(1<<i));
if(st[n]) s|=(1<<i);
else ans|=(1<<i);
}
cout<<ans<<endl;
}