Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- const int N=2e5+6;
- int n,parent[N],siz[N];
- int find(int v)
- {
- if(v==parent[v]) return v;
- return parent[v]=find(parent[v]);
- }
- void uni(int a,int b)
- {
- a=find(a);
- b=find(b);
- if(a==b) return ;
- if(siz[a]<siz[b]) swap(a,b);
- siz[a]+=siz[b];
- parent[b]=a;
- return ;
- }
- int main()
- {
- cin>>n;
- for(int i=1;i<=n;i++) parent[i]=i,siz[i]=1;
- int thres,q;
- cin>>thres>>q;
- int ori[q],des[q];
- for(int i=0;i<q;i++) cin>>ori[i];
- cin>>q;
- for(int i=0;i<q;i++) cin>>des[i];
- for(int i=thres+1;i<=n;i++)
- {
- for(int j=i;j<=n;j+=i) uni(i,j);
- }
- for(int i=0;i<q;i++)
- {
- if(find(ori[i])==find(des[i])) cout<<1<<endl;
- else cout<<0<<endl;
- }
- }
- #include<bits/stdc++.h>
- using namespace std;
- #define F first
- #define S second
- #define ll long long
- int main()
- {
- ll n,m,k,hell=1e12;
- cin>>n>>m>>k;
- vector<pair<ll,ll> > adj[n+1];
- vector<vector<bool> >vis(n+1,vector<bool>(k+1,0));
- vector<vector<ll> >dis(n+1,vector<ll>(k+1,hell));
- for(int i=0;i<m;i++)
- {
- ll x,y,z;
- cin>>x>>y>>z;
- adj[x].push_back({y,z});
- adj[y].push_back({x,z});
- }
- for(int i=0;i<=k;i++) dis[1][i]=0;
- priority_queue<tuple<ll,ll,ll> >pq;
- pq.push({0,1,0});
- while(!pq.empty())
- {
- ll x,y,z;
- tie(x,y,z)=pq.top();
- pq.pop();
- if(vis[y][z]==1) continue;
- vis[y][z]=1;
- for(auto i:adj[y])
- {
- if(dis[i.F][z]>dis[y][z]+i.S)
- {
- dis[i.F][z]=dis[y][z]+i.S;
- pq.push({-dis[i.F][z],i.F,z});
- }
- if(z<k)
- {
- if(dis[i.F][z+1]>dis[y][z])
- {
- dis[i.F][z+1]=dis[y][z];
- pq.push({-dis[i.F][z+1],i.F,z+1});
- }
- }
- }
- }
- for(int i=1;i<=n;i++)
- {
- ll ans=hell;
- for(int j=0;j<=k;j++) ans=min(ans,dis[i][j]);
- cout<<ans<<' ';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement