栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

蓝桥31天|今天3道题Day7|C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥31天|今天3道题Day7|C++

1.相乘

#include 
using namespace std;
int main()
{
  for(long long i=1;i<=1000000007;i++){
    if((i*2021)%1000000007==999999999){
            printf("%lld",i);
            break;
    }
  }
  return 0;
}

2.空间

#include 
using namespace std;
int main()
{
  //1B=8b
  long long ans=8*256*1024*32;
  printf("%lld",ans);
  return 0;
}
3.发现环


思路:题意明显是找环并记录环上的编号,改变有向图的拓扑排序的写法,将入度双向保存,则入读为一的点入队,未被遍历过的点即为环上的点。

云课报运行错误,官网a了,不知道什么原因
再研究看看吧

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int N=1e5+10;
int n;
int h[N],e[N*2],ne[N*2],idx=0;//通过邻接表存储图
int in[N];//记录入度
//h记录表头的边号,e代表表头指向的点,ne表示链表下一条边, idx为边号
bool st[N];//是否走过
vectorans(N);
void add(int a,int b){
  e[idx]=b;
  ne[idx]=h[a];
  h[a]=idx++;
  in[b]++;
}
bool dfs(){
  queueq;
  for(int i=1;i<=n;i++){
    if(in[i]==1){
       q.push(i);
    }
  }
  while(!q.empty()){
    int t=q.front();
    q.pop();
    ans[t]=true;
    for(int i=h[t];i!=-1;i=ne[i]){
      int x=e[i];
      in[x]--;
      if(in[x]==1){
        q.push(x);
      }
    }
  }

}
int main()
{
  int a,b;
  memset(h,-1,sizeof h);
  scanf("%d",&n);
  for(int i=1;i<=n;i++){
    scanf("%d%d",&a,&b);
    add(a,b);
    add(b,a);
  }
  dfs();
  bool flag=false;
  for(int i=1;i<=n;i++){
    if(ans[i]==false){
      if(flag)printf(" ");
      printf("%d",i);
      flag=true;
    }
  }


  return 0;
}


ac代码

#include 
#include 
#include 
#include 
#include 
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
const int MAXN = 210000;
struct Edge
{
    int v,next;
}edge[MAXN];
int head[MAXN],per[MAXN],k,vis[MAXN],len,ans[MAXN];
void Add_edge(int x,int y)
{
    edge[k].v = y;edge[k].next = head[x];head[x] = k++;
}
bool falg = false;
void dfs(int p,int f)
{
    for(int i = head[p];i != -1;i = edge[i].next)
    {
        if(falg) return ;
        int v = edge[i].v;
        if(v == f) continue;
        per[v] = p;
        if(vis[v])
        {
            ans[len++] = p;
            while(per[p] != v)
            {
                ans[len++] = per[p];
                p = per[p];
            }
            ans[len++] = v;
            falg = true;
            return ;
        }
        vis[v] = 1;
        dfs(v,p);
    }
    return ;
}
int main()
{
    int n;
    scanf("%d",&n);
    int x,y;k = 0;len = 0;
    for(int i = 1;i <= n;i ++) per[i] = i;
    memset(head,-1,sizeof(head));
    for(int i = 0;i < n;i ++)
    {
        scanf("%d%d",&x,&y);
        Add_edge(x,y);
        Add_edge(y,x);
    }
    memset(vis,false,sizeof(vis));
    vis[1] = 1;
    dfs(1,0);
    sort(ans,ans+len);
    for(int i = 0;i < len;i ++)
        printf("%d%c",ans[i],i==len-1?'n':' ');
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号