目录
A - Til the Cows Come Home
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
const int inf=0x3f3f3f3f;
int g[3500][3500];
int dis[3500],vis[3500];
int main()
{
int t,n;
cin>>t>>n;
int a,b,v;
memset(g,inf,sizeof(g));
for(int i=1;i<=t;i++)
{
cin>>a>>b>>v;
g[a][b]=g[b][a]=min(g[a][b],v);
}
for(int i=1;i<=n;i++)
{
dis[i]=g[1][i];
vis[i]=0;
}
dis[1]=0;
vis[1]=1;
for(int i=1;i<=n;i++)
{
int ans=inf,k=0;
for(int j=1;j<=n;j++)
{
if(dis[j]<ans&&!vis[j])
{
ans=dis[j];
k=j;
}
}
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>dis[k]+g[k][j])
{
dis[j]=dis[k]+g[k][j];
}
}
}
cout<<dis[n]<<endl;
}
B - Frogger
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define inf 0x3f3f3f3f;
using namespace std;
double g[3500][3500];
double dis[3500];
int vis[3500];
struct st{
double x,y;
}s[250];
int main()
{
int t,n;t=1;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=1;i<=n;i++)
{
cin>>s[i].x>>s[i].y;
for(int j=1;j<i;j++)
{
double a=s[i].x-s[j].x;
double b=s[i].y-s[j].y;
double v=sqrt(a*a+b*b);
// cout<<a<<" "<<b<<" "<<v<<endl;
g[i][j]=g[j][i]=v;
}
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<i<<" "<<j<<" "<<g[i][j]<<endl;
}
}*/
for(int i=1;i<=n;i++)
{
dis[i]=g[1][i];
vis[i]=0;
}
for(int i=1;i<=n;i++)
{
double ans=inf;
int k=-1;
for(int j=1;j<=n;j++)
{
if(dis[j]<ans&&!vis[j])
{
ans=dis[j];
k=j;
}
}
if(k!=-1){
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>max(dis[k],g[k][j]))
{
dis[j]=max(dis[k],g[k][j]);
}
}
}}
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",t++,dis[2]);
}}
C - Heavy Transportation
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll g[1500][1500];
ll dis[1500];
int vis[1500];
int main()
{
int t,n,m;
cin>>t;
int e=1;
while(t--)
{
cin>>n>>m;
ll a,b,v;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) g[i][j]=0;
else g[i][j]=-1;
}
}
for(int i=1;i<=m;i++)
{
cin>>a>>b>>v;
g[a][b]=g[b][a]=v;
}
for(int i=1;i<=n;i++)
{
dis[i]=g[1][i];
vis[i]=0;
}
dis[1]=0;
vis[1]=1;
for(int i=1;i<=n;i++)
{
int ans=0;
int k=-1;
for(int j=1;j<=n;j++)
{
if(dis[j]>ans&&!vis[j])
{
ans=dis[j];
k=j;
}
}
//cout<<k<<endl;
if(k!=-1){
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min(dis[k],g[k][j]))
{
dis[j]=min(dis[k],g[k][j]);
}
}
}}
cout<<"Scenario #"<<e<<":"<<endl;
cout<<dis[n]<<endl<<endl;
e++;
}}
D - Silver Cow Party
#include<bits/stdc++.h>
#define inf 0x7fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct edg{
int to;
int vi,wi;
}e[100005];
int cnt,head[100005];
void add(int a,int b,int c)
{
e[++cnt].to=head[a];
e[cnt].vi=b;
e[cnt].wi=c;
head[a]=cnt;
}
int dis[100005],vis[100005],vis1[100005],dis1[100005];
struct ed{
int v,w;
bool operator<(const ed&c)const
{
return c.w<w;
}
};
priority_queue<ed>q;
int main()
{
ll n,m,x;
n=read();
m=read();
x=read();
int a,b,t;
for(int i=0;i<m;i++)
{
a=read();
b=read();
t=read();
add(a,b,t);
}
memset(vis,0,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
q.push(ed{x,0});
vis[x]=1;
dis[x]=0;
while(!q.empty())
{
ed d=q.top();
q.pop();
vis[d.v]=0;
int a1=d.v,b1=d.w;
for(int i=head[a1];i;i=e[i].to)
{
int j=e[i].vi;
if(dis[j]>dis[a1]+e[i].wi)
{
dis[j]=dis[a1]+e[i].wi;
if(!vis[j])
{
vis[j]=1;
q.push(ed{j,dis[j]});
}
}
}
}
int ans=0,su=0;
for(int i=1;i<=n;i++)
{
if(i!=x)
{
su=dis[i];
//cout<<dis[i]<<endl;
priority_queue<ed>p;
memset(vis1,0,sizeof(vis1));
memset(dis1,0x3f,sizeof(dis1));
p.push(ed{i,0});
dis1[i]=0;
vis1[i]=1;
while(!p.empty())
{
int l=p.top().v;
int y=p.top().w;
p.pop();
vis1[l]=0;
for(int i=head[l];i;i=e[i].to)
{
int k=e[i].vi;
if(dis1[k]>dis1[l]+e[i].wi)
{
dis1[k]=dis1[l]+e[i].wi;
if(!vis1[k])
{
vis1[k]=1;
p.push(ed{k,dis1[k]});
}
}
}
}
su+=dis1[x];
if(su>ans) ans=su;
}
}
cout<<ans<<endl;
}
F - Wormholes
#include<bits/stdc++.h>
#define inf 0x7fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct edg{
int to;
int vi,wi;
}e[100005];
int cnt,head[100005];
void add(int a,int b,int c)
{
e[++cnt].to=head[a];
e[cnt].vi=b;
e[cnt].wi=c;
head[a]=cnt;
}
int dis[100005],vis[100005],cn[100005],dis1[100005];
struct ed{
int v,w;
bool operator<(const ed&c)const
{
return c.w<w;
}
};
priority_queue<ed>q;
int main()
{
int t;
t=read();
while(t--)
{
ll n,m,w;
n=read();
m=read();
w=read();
int u,v,p;
queue<int>q;
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
memset(cn,0,sizeof(cn));
memset(head,0,sizeof(head));
cnt=0;
for(int i=1;i<=n;i++)
{
q.push(i);
vis[i]=1;
}
for(int i=0;i<m;i++)
{
u=read();
v=read();
p=read();
add(u,v,p);
add(v,u,p);
}
for(int i=0;i<w;i++)
{
u=read();
v=read();
p=read();
add(u,v,-p);
}
int fl=0;
while(!q.empty())
{
int f=q.front();
q.pop();
vis[f]=0;
for(int i=head[f];i;i=e[i].to)
{
int v=e[i].vi;
if(dis[v]>dis[f]+e[i].wi)
{
dis[v]=dis[f]+e[i].wi;
cn[v]=cn[f]+1;
if(cn[v]>=n)
{
fl=1;
break;
}
if(!vis[v])
{
q.push(v);
vis[v]=1;
}
}
}if(fl) break;
}
if(fl) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
for(int i=0;i<=n;i++)
{
e[i].to=0;
e[i].vi=0;
e[i].wi=0;
}
}
}
G - MPI Maelstrom
//#include<bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include<stdio.h>
#define inf 0x3fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
ll ma=1e18;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct ed{
int v,w,to;
}e[100005];
int head[100005],vis[100005],dis[100005],cnt;
void add(int x,int y,int z)
{
e[++cnt].to=head[x];
e[cnt].v=y;
e[cnt].w=z;
head[x]=cnt;
}
struct qq{
int b,c;
bool operator<(const qq& zz)const
{
return c>zz.c;
}
};
int t[10005][10005];
int main()
{
int n;
while(cin>>n){
memset(vis,0,sizeof(vis));
//memset(head,0,sizeof(head));
// cnt=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j!=i) t[i][j]=t[j][i]=inf;
else t[i][j]=0;
}
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
{
char a[30];
scanf("%s",a);
if(a[0]!='x')
{
int l=atoi(a);
t[i][j]=t[j][i]=l;
}
}
}
for(int i=1;i<=n;i++)
dis[i]=t[1][i];
dis[1]=0;
vis[1]=1;
int w=inf,k=0;
for(int i=1;i<=n;i++)
{
w=inf,k=0;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<w)
{
w=dis[j];
k=j;
}
}
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>dis[k]+t[k][j])
{
dis[j]=dis[k]+t[k][j];
}
}
}
ll ans=0;
for(int i=2;i<=n;i++)
{
if(dis[i]>ans&&dis[i]!=inf)
ans=dis[i];
// cout<<dis[i]<<endl;
}
cout<<ans<<endl;
}
}
H-Cow Contest
#include<bits/stdc++.h>
#define inf 0x7fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
/*struct edge{
int vi,wi,nex;
}e[510];
struct node{
int x,y;
bool operator <(const node&a)const
{
return y>a.y;
}
};
void add(int x,int y,int w)
{
e[++cnt].nex=head[x];
e[cnt].vi=y;
e[cnt].wi=w;
head[x]=cnt;
}
priority_queue<node>q;*/
int g[150][150];
int main()
{
//int n,m;
ll k;
int n;
n=read();
//ans[0]=1;
k=read();
//map<ll,ll>p,q,r;
ll x,y;
for(int i=0;i<k;i++)
{
x=read();
y=read();
g[x][y]++;
}
//ll ans=1,a;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(g[j][i]&&g[i][k])
{
g[j][k]++;
}
}
}
}
int f=0,ans=0;
for(int i=1;i<=n;i++)
{
f=0;
for(int j=1;j<=n;j++)
{
if(g[j][i]||g[i][j]||i==j)
{
continue;
}
else {
f=1;
break;
}
}
if(!f) ans++;
}
cout<<ans<<endl;
}
I - Arbitrage
#include<bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include<stdio.h>
#define inf 0x3fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
ll ma=1e18;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
int main()
{
int n,k=1;
while(1){
n=read();
if(n==0) break;
string a,b;
double g[50][50];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) g[i][j]=1.0;
else g[i][j]=0;
}
}
map<string,int>p;
for(int i=1;i<=n;i++)
{
cin>>a;
p[a]=i;
}
int t;
double c;
t=read();
for(int i=0;i<t;i++)
{
cin>>a>>c>>b;
int l=p[a],m=p[b];
g[l][m]=c;
}
cout<<"Case "<<k<<": ";
k++;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int d=1;d<=n;d++)
{
if(g[j][d]<g[j][i]*g[i][d])
{
g[j][d]=g[j][i]*g[i][d];
}
}
}
}
int fl=0;
for(int i=1;i<=n;i++)
{
if(g[i][i]>1)
{
fl=1;
break;
}
}
if(fl) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}}
J - Invitation Cards
#include<bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include<stdio.h>
#define inf 0x3fffffff
//#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
ll ma=1e18;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct edg{
ll to,v,w;
}e[1000005];
int cnt,head[1000005],cnt1,vis[1000005],t[1000005][3];
ll dis[1000005];
void add(ll x,ll y,ll z)
{
e[++cnt].to=head[x];
e[cnt].v=y;
e[cnt].w=z;
head[x]=cnt;
}
queue<int>o;
int main()
{
int n;
n=read();
while(n--)
{
ll p,q;
p=read();
q=read();
memset(head,0,sizeof(head));
//memset(head1,0,sizeof(head1));
cnt=0;
memset(vis,0,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
for(int i=0;i<q;i++)
{
t[i][0]=read();
t[i][1]=read();
t[i][2]=read();
add(t[i][0],t[i][1],t[i][2]);
// add1(b,a,c);
}
// queue<int>o,f;
o.push(1);
vis[1]=1;
dis[1]=0;
while(!o.empty())
{
int s=o.front();
o.pop();
vis[s]=0;
for(int i=head[s];i;i=e[i].to)
{
int vi=e[i].v;
if(dis[vi]>dis[s]+e[i].w)
{
dis[vi]=dis[s]+e[i].w;
if(!vis[vi])
{
vis[vi]=1;
o.push(vi);
}
}
}
}
ll ans=0;
for(int i=1;i<=p;i++)
{
ans+=dis[i];
dis[i]=inf;
}
memset(head,0,sizeof(head));
//memset(head1,0,sizeof(head1));
cnt=0;
memset(vis,0,sizeof(vis));
memset(e,0,sizeof(e));
for(int i=0;i<q;i++)
{
add(t[i][1],t[i][0],t[i][2]);
// add1(b,a,c);
}
o.push(1);
vis[1]=1;
dis[1]=0;
while(!o.empty())
{
int s=o.front();
o.pop();
vis[s]=0;
for(int i=head[s];i;i=e[i].to)
{
int vi=e[i].v;
if(dis[vi]>dis[s]+e[i].w)
{
dis[vi]=dis[s]+e[i].w;
if(!vis[vi])
{
vis[vi]=1;
o.push(vi);
}
}
}
}
for(int i=2;i<=p;i++)
{
ans+=dis[i];
}
memset(e,0,sizeof(e));
cout<<ans<<endl;
}
}
K - Candies