DFS Order
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int head[N],Next[N],ver[N],tot;
void add(int x,int y){
ver[++tot]=y,Next[tot]=head[x],head[x]=tot;
}
void dfs(int x=1,int y=0){
cout<<x<<" ";
for(int i=head[x];i;i=Next[i]){
if(ver[i]==y)continue;
dfs(ver[i],x);
}
cout<<x<<" ";
}
int main(){
freopen("DFS.txt","r",stdin);
freopen("ANS.txt","w",stdout);
// your code
int x,y,n;
while(cin>>n){
memset(head,0,sizeof head);
tot=0;
for(int i=1;i<n;++i){
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs();
cout<<endl;
}
}
A:
#include<bits/stdc++.h>
using namespace std;
bool s[26][26];
int main(){
string a;
while(cin>>a){
memset(s,0,sizeof s);
s[*a.begin()-97][*(a.end()-1)-97]=1;
while(cin>>a&&a!="0"){
s[*a.begin()-97][*(a.end()-1)-97]=1;
}
for(int k=0;k<26;++k)
for(int i=0;i<26;++i)
for(int j=0;j<26;++j)
s[i][j]=max(s[i][j],s[i][k]&&s[k][j]);
cout<<(s[1]['m'-97]?"Yes.":"No.")<<endl;
}
}
B:
#include<iostream>
#include<algorithm>
using namespace std;
int map[205][205];
int a,b;
int main(){
while(cin>>a>>b){
for(int i=0;i<a;++i)
for(int j=0;j<a;++j)
if(i==j)map[i][j]=0;
else map[i][j]=1e9;
for(int i=0;i<b;++i){
int z,x,c;cin>>z>>x>>c;
map[z][x]=min(map[z][x],c);
map[x][z]=min(map[x][z],c);
}
for(int k=0;k<a;++k)
for(int i=0;i<a;++i)
for(int j=0;j<a;++j)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
int r,t;
cin>>r>>t;
map[r][t]==1e9?cout<<-1<<endl:cout<<map[r][t]<<endl;
}
}
C:
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int M,N;
int ver[20000],head[20000],edge[20000],Next[20000],tot;
void scan(int x,int y,int z)
{
tot++;
ver[tot]=y;
edge[tot]=z;
Next[tot]=head[x];
head[x]=tot;
}
int v[2000];
int dis[20000];
int main()
{
while(~scanf("%d %d",&N,&M)&&N!=0&&M!=0)
{
tot=0;
memset(ver,0,sizeof(ver));
memset(head,0,sizeof(head));
memset(edge,0,sizeof(edge));
memset(Next,0,sizeof(Next));
int i;
for(i=0;i<M;i++)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
scan(a,b,c);
scan(b,a,c);
}
memset(v,0,sizeof(v));
memset(dis,0x3f,sizeof(dis));
queue<int> Q;
Q.push(1);
v[1]=1;
dis[1]=0;
int c;
while(!Q.empty())
{
c=Q.front();
Q.pop();
v[c]=0;
for(i=head[c];i;i=Next[i])
{
int y=ver[i];
if(dis[y]>dis[c]+edge[i])
{
dis[y]=dis[c]+edge[i];
if(v[y]==0)
{
Q.push(y);
v[y]=1;
}
}
}
}
printf("%d\n",dis[N]);
}
}