https://vjudge.net/contest/312902?tdsourcetag=s_pctim_aiomsg#overview
A
B
C
D
E
#include<bits/stdc++.h> using namespace std; char mp[1005][1005]; int mpf[1005][1005]; int dir[4][2]= {-1,0,1,0,0,-1,0,1}; int flagw[10000005]; struct note { int x,y; }; queue<note> que; int main() { int n,m,q; scanf("%d%d%d",&n,&m,&q); for(int i=1; i<=n; i++) scanf("%s",mp[i]+1); int flag=0; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(mp[i][j]=='.') { flag++; note t; t.x=i; t.y=j; que.push(t); int w=0; while(!que.empty()) { note t=que.front(); que.pop(); if(mp[t.x][t.y]!='.') continue; mpf[t.x][t.y]=flag; mp[t.x][t.y]='#'; for(int k=0; k<4; k++) { int nx,ny; nx=t.x+dir[k][0]; ny=t.y+dir[k][1]; if(nx>n||nx<1||ny>m||ny<1) continue; if(mp[nx][ny]=='*') w++; else if (mp [NX] [ny] == ' . ' ) { note tt; tt.x = NX; tt.y = ny; que.push (tt); } } } Flagw [flag] = w; } } For ( int i = 1 ; i <= q; i ++ ) { int a, b; scanf ("%d%d",&a,&b); printf("%d\n",flagw[mpf[a][b]]); } }
F
G
H
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=1e5+10; ll sum[maxn]; ll val[maxn]; int head[2*maxn],ver[2*maxn],nxt[2*maxn]; ll edge[2*maxn]; int tot; int ans=0; void add(int u,int v,ll w) { ver[++tot]=v; edge[tot]=w; nxt[tot]=head[u]; head[u]=tot; } void dfs(int u,int fa) { if(sum[u]<=val[u]) ans++; else return; for(int i=head[u]; i; i=nxt[i]) { int v=ver[i]; if(v==fa) continue; ll w=edge[i]; if(sum[u]+w>0) sum[v]=sum[u]+w; else sum[v]=0; dfs(v,u); } } int main() { int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&val[i]); for(int i=2; i<=n; i++) { int v; ll w; scanf("%d%lld",&v,&w); add(i,v,w); add(v,i,w); } dfs(1,0); printf("%d",n-ans); }
I
J
K
L
#include<bits/stdc++.h> using namespace std; //int e[5005][5005]; vector<int> e[5005]; int check(int x) { int y=e[x][0]; int z=e[y][0]; if(e[z][0]==x) return 1; else return 0; } int main() { int n; scanf("%d",&n); for(int i=1; i<=n; i++) { int a; scanf("%d",&a); e[i].push_back(a); } int flag=0; for(int i=1; i<=n; i++) { if(check(i)) { flag=1; break; } } if(flag) printf("YES"); else printf("NO"); }
M
#include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; const int maxn=1e5+10; int f[maxn]; int head[2*maxn],ver[2*maxn],edge[2*maxn],nxt[2*maxn]; int tot; int getf(int x) { if(f[x]==x) return x; return f[x]=getf(f[x]); } void add(int u,int v,int w) { ver[++tot]=v; edge[tot]=w; nxt[tot]=head[u]; head[u]=tot; } int kd[maxn]; int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=1; i<=m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } for(int i=1; i<=k; i++) { int t; scanf("%d",&t); kd[t]=1; } int minn=INF; for(int i=1; i<=n; i++) { if(kd[i]==1) { for(int j=head[i]; j; j=nxt[j]) { int v=ver[j]; int w=edge[j]; if(kd[v]==0) minn=min(minn,w); } } } if(minn!=INF) printf("%d",minn); else printf("-1"); }
N
#include<bits/stdc++.h> using namespace std; const int maxn=5e5+10; int f[maxn]; int size[maxn]; int getf(int x) { if(f[x]==x) return x; else return f[x]=getf(f[x]); } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { f[i]=i; size[i]=1; } while(m--) { int t; scanf("%d",&t); int a,b; if(t>0) { scanf("%d",&a); t--; } else continue; int t1=getf(a); for(int i=1; i<=t; i++) { scanf("%d",&b); int t2; t2=getf(b); if(t1==t2) continue; f[t2]=t1; size[t1]+=size[t2]; } } for(int i=1; i<=n; i++) { int t=getf(f[i]); printf("%d ",size[t]); // printf("%d %d\n",getf(f[i]),size[i]); } }
O
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; vector<int> v[maxn]; int book[maxn]; vector<int> v1,v2; int flag=1; void dfs(int x,int fa) { for(int i=0; i<v[x].size(); i++) { int y=v[x][i]; if(y==fa) continue; if(book[x]==1) { if(book[y]==1) { flag=0; return; } if(book[y]==0) { book[y]=2; dfs(y,x); } } if(book[x]==2) { if(book[y]==2) { flag=0; return; } if(book[y]==0) { book[y]=1; dfs(y,x); } } } } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { int a,b; scanf("%d%d",&a,&b); v[a].push_back(b); v[b].push_back(a); } for(int i=1; i<=n; i++) { if(book[i]==0&&v[i].size()) { book[i]=1; dfs(i,0); } } if(flag) { for(int i=1; i<=n; i++) { if(book[i]==1) v1.push_back(i); if(book[i]==2) v2.push_back(i); } printf("%d\n",v1.size()); for(auto i:v1) printf("%d ",i); printf("\n"); printf("%d\n",v2.size()); for(auto i:v2) printf("%d ",i); } else printf("-1"); }