this and this,but this.why?I can't understand.If you help me to accept luogu's problem,I will give you a fun in luogu——May_Cry_.
I love my code!!!Tell me why i write very good ways but always TLE.
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int QAQ=2e5+7;
int m,s,n;
ll k,dis[QAQ],a[QAQ];
vector<int> dian[QAQ];
vector<ll> bian[QAQ];
void add(int x,int y,ll c) {dian[x].push_back(y),bian[x].push_back(c);}
#define mk make_pair
priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > > dui;
bitset<QAQ> vis;
bitset<19> guo[QAQ][19];
struct xxx {int a,b,c;};
queue<xxx> zou;
void dijn()
{
for(int i=0;i<=n;i++) dis[i]=1e18;
vis.reset();
dis[s]=0;
dui.push(mk(dis[s],s));
while(!dui.empty())
{
int x=dui.top().second;dui.pop();
if(vis[x]) continue;
vis[x]=1;
zou.push({x,0,0});
guo[x][0][0]=1;
while(!zou.empty())
{
xxx nw=zou.front();zou.pop();
if(nw.b<k&&!guo[nw.a][nw.b+1][nw.c])
zou.push({nw.a,nw.b+1,nw.c}),
guo[nw.a][nw.b+1][nw.c]=1;
if(nw.b<k&&!guo[nw.a^(int)pow(2,nw.b)][nw.b+1][nw.c+1])
zou.push({nw.a^(int)pow(2,nw.b),nw.b+1,nw.c+1}),
guo[nw.a^(int)pow(2,nw.b)][nw.b+1][nw.c+1]=1;
if(nw.c<=k&&nw.b==k)
if(dis[nw.a]>dis[x]+a[nw.c])
dis[nw.a]=dis[x]+a[nw.c],dui.push(mk(dis[nw.a],nw.a));
}
for(int i=0;i<(int)dian[x].size();i++)
{
int v=dian[x][i],w=bian[x][i];
if(dis[v]>dis[x]+w)
dis[v]=dis[x]+w,dui.push(mk(dis[v],v));
}
}
}
int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x;
}
signed main()
{
k=read(),m=read(),s=read();
n=pow(2,k);
for(int i=1;i<=k;i++) a[i]=read();
for(int i=1,u,v,w;i<=m;i++) u=read(),v=read(),w=read(),add(u,v,w),add(v,u,w);
dijn();
for(int i=0;i<n;i++) printf("%lld ",dis[i]);
return 0;
}
And I am not a Englishman.But I think English is cool,so speak in English.If you want to speak English like me,you can use Deepseek like me.