题解

P5663 加工零件

 

暴力搜索

搜索显然会TLE

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>

using namespace std;

typedef long long ll;

inline int read()
{
    int ans=0;
    char last=' ',ch=getchar();
    while(ch<'0'||ch>'9') last=ch,ch=getchar();
    while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
    if(last=='-') ans=-ans;
    return ans;
}

const int maxn=1e5+10;
struct node{
    int to,nxt;
}edge[maxn*2];
int head[maxn],cnt=0;
int n,m,q;
bool vis[maxn];//节点i是否与1直接相连
int son[1005][1005]; 
int num[1005];

void addedge(int u,int v)
{
    edge[++cnt].to =v;edge[cnt].nxt =head[u];head[u]=cnt;
    edge[++cnt].to =u;edge[cnt].nxt =head[v];head[v]=cnt;
}

void dfs(int sum,int u)
{
    if(sum<0) return;
    if(num[1]==0) return;
    for(int v,i=1;i<=son[u][0];i++){
        v=son[u][i];
        num[v]=min(num[v],sum);
        dfs(sum-1,v);
    }
}

int main()
{
    n=read();m=read();q=read();
    vis[1]=1;
    for(int u,v,i=1;i<=m;i++){
        u=read();v=read();
        if(u==1) vis[v]=1;
        if(v==1) vis[u]=1;
        son[u][++son[u][0]]=v;
        son[v][++son[v][0]]=u;
        addedge(u,v);
        addedge(v,u);
    }
    for(int a,l,t=1;t<=q;t++){
        memset(num,63,sizeof(num));
        a=read();l=read();
        if(l==1){
            if(a==1||(!vis[a])) {
                printf("No\n");
                continue;
            }
            else if(vis[a]&&a!=1) {
                printf("Yes\n");
                continue;
            }
        }else{
            num[a]=l;
            dfs(l-1,a); 
            if(num[1]==0) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}
暴力搜索 40pt

相关文章:

  • 2021-12-27
  • 2022-12-23
  • 2021-06-09
  • 2021-08-23
  • 2021-12-19
  • 2022-12-23
  • 2021-08-03
  • 2022-01-06
猜你喜欢
  • 2020-03-29
  • 2022-12-23
  • 2021-10-08
  • 2021-07-21
  • 2022-12-23
  • 2022-12-23
  • 2021-11-26
相关资源
相似解决方案