#include <iostream>
#include <vector>
#include <algorithm>
// #include <queue>
#include <utility>
#include <bitset>
using namespace std;
vector<vector<pair<int,int> > > a(1001);
int ans=2048,st,en;
bitset<1001> vis;
vector<vector<int> > dp(1001,vector<int>(2048));
void dfs(int u,int tmp){
//if(tmp>=ans)return;
if(u==en){
ans=min(ans,tmp);
return;
}
for(int i=0;i<a[u].size();i++){
int v=a[u][i].first,w=a[u][i].second,ntmp=w|tmp;
if((vis[v])||(ntmp>=ans)||dp[v][ntmp])continue;
else {
vis[v]=1;
dp[v][ntmp]=1;
dfs(v,tmp|w);
vis[v]=0;
}
}
}
int main(){
ios::sync_with_stdio(0);
int n,e;
cin>>n>>e;
for(int i=0;i<e;i++){
int x,y,w;
cin>>x>>y>>w;
a[x].push_back({y,w});
a[y].push_back({x,w});
}
cin>>st>>en;
vis[st]=1;
dfs(st,0);
if(ans==2048)cout<<-1<<endl;
else cout<<ans<<endl;
}
#include <vector>
#include <algorithm>
// #include <queue>
#include <utility>
#include <bitset>
using namespace std;
vector<vector<pair<int,int> > > a(1001);
int ans=2048,st,en;
bitset<1001> vis;
vector<vector<int> > dp(1001,vector<int>(2048));
void dfs(int u,int tmp){
//if(tmp>=ans)return;
if(u==en){
ans=min(ans,tmp);
return;
}
for(int i=0;i<a[u].size();i++){
int v=a[u][i].first,w=a[u][i].second,ntmp=w|tmp;
if((vis[v])||(ntmp>=ans)||dp[v][ntmp])continue;
else {
vis[v]=1;
dp[v][ntmp]=1;
dfs(v,tmp|w);
vis[v]=0;
}
}
}
int main(){
ios::sync_with_stdio(0);
int n,e;
cin>>n>>e;
for(int i=0;i<e;i++){
int x,y,w;
cin>>x>>y>>w;
a[x].push_back({y,w});
a[y].push_back({x,w});
}
cin>>st>>en;
vis[st]=1;
dfs(st,0);
if(ans==2048)cout<<-1<<endl;
else cout<<ans<<endl;
}
Comments
Post a Comment