T1幸运数反转:
#include<bits/stdc++.h>
using namespace std;
int k,n;
bool pd;
char s[100005];
inline int read(){
int k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-')
f=-1;
for(;isdigit(c);c=getchar())
k=k*10+c-'0';
return k*f;
}
int main(){
while(n=read()){
k=read();
cin>>s;
for(int i=1;i<=n&&k>0;i++){
if(s[i-1]=='2'&&s[i]=='2'&&s[i+1]=='3'&&(i)%2){
if(k%2)
s[i]='3';
break;
}
if(s[i-1]=='2'&&s[i]=='3'){
if(s[i+1]=='3'&&(i)%2){
if(k%2){
s[i]='2';
break;
}
else{
break;
}
}
else{
if((i)%2){
k--;
s[i]='2';
}
else{
k--;
s[i-1]='3';
}
}
}
}
for(int i=0;i<n;i++)
cout<<s[i];
cout<<endl;
}
}
T2树的最短路:
#include<bits/stdc++.h>
using namespace std;
int n,Q,k,d[10005],x,y;
bool vis[10005];
struct edge{
int u,v,w;
}e[20005];
int f[10005],ne[20005];
inline int read(){
int k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-')
f=-1;
for(;isdigit(c);c=getchar())
k=k*10+c-'0';
return k*f;
}
inline void dfs(int now){
vis[now]=true;
for(int i=f[now];i;i=ne[i]){
int pa=e[i].v;
if(!vis[pa])
d[pa]=d[now]+e[i].w,dfs(pa);
}
return;
}
int main(){
n=read();
for(int i=1;i<=n*2-2;i+=2){
e[i].u=e[i+1].v=read(),e[i].v=e[i+1].u=read(),e[i].w=e[i+1].w=read();
ne[i]=f[e[i].u],f[e[i].u]=i;
ne[i+1]=f[e[i+1].u],f[e[i+1].u]=i+1;
}
Q=read(),k=read();
dfs(k);
while(Q--){
x=read(),y=read();
cout<<d[x]+d[y]<<endl;
}
return 0;
}