首页 > 其他分享 >板子哲学康复练习

板子哲学康复练习

时间:2023-10-19 17:36:46浏览次数:28  
标签:register int 康复 练习 板子 rg cerr il define

开学后第一次用 Windows 打代码,有种唐氏儿的美。

Tarjan

tarjan 求强连通

不知道有没有过编,但大概没错。

Miku's Code
#include<bits;/stdc++.h>
#define rg register int
#define il inline
il int Min(int x,int y){ return x<y?x:y; }
il int Max(int x,int y){ return x<y?y:x; }
il int Abs(int x,int y){ return x<0?-x:x; }
il int read(){
    char c=getchar();int f=1,x=0;
    while(c<48){ if(c=='-')f=-1;c=getchar(); }
    while(c>47){ x=(x<<3)+(x<<1)+(c^48);c=getchar(); }
    return x*f;
}

int n,m,a[maxn];
int dfn[maxn],
int head[maxn<<1],t;
struct Edge{ int v,w;int next; };Edge e[maxn<<1];
il void add_edge(int u,int v,int w){ e[++t].v=v;e[t].w=w;e[t].next=head[u];head[u]=t; }

void tarjan(int now){
    dfn[now]=low[now]=++cnt;
    for(rg i=head[now];i;i=e[i].next){
        int to=e[i].v;
        if(!dfn[to]){
            tarjan(to);
            low[now]=Min(low[now],low[to]);
        }
        else if(vis[to])    low[now]=Min(low[now],dfn[to]);
    }
    if(dfn[now]==low[now]){
        int cur;++id;
        do{
            cur=stk[top--];vis[cur]=false;
            scc[cur]=id;++siz[id];
        }while(cur!=now);
    }
}

il void input(){
    n=read(),m=read();int u,v,w;
    for(rg i=1;i<=n;++i)    a[i]=read();
    for(rg i=1;i<=m;++i)    u=read(),v=read(),w=read(),add_edge(u,v,w);
}

int main(){
    input();
    for(rg i=1;i<=n;++i)    if(!dfn[i]) tarjan(i);
    return 0;
}

tarjan 求环

写了一个最小环版本的,过了。

Miku's Code
#include<bits/stdc++.h>
#define rg register int
#define il inline
#define cerr std::cerr
#define endl '\n'
il int Max(int x,int y){ return x<y?y:x; }
il int Min(int x,int y){ return x<y?x:y; }
il int Abs(int x){ return x<0?-x:x; }
il int read(){
    char c=getchar();int x=0,f=1;
    while(c<48){ if(c=='-')f=-1;c=getchar(); }
    while(c>47){ x=(x<<3)+(x<<1)+(c^48);c=getchar(); }
    return x*f;
}const int maxn=2e5+5,inf=0x3f3f3f3f;

int n,m,minn,id,a[maxn],dfn[maxn],low[maxn],tot,stk[maxn],top;
bool invis[maxn];
int head[maxn<<1],t;
struct Edge{ int v;int next; };Edge e[maxn<<1];
il void add_edge(int u,int v){ e[++t].v=v;e[t].next=head[u];head[u]=t; }

void tarjan(int now){
    dfn[now]=low[now]=++tot;
    stk[++top]=now;invis[now]=true;
    for(rg i=head[now];i;i=e[i].next){
        int to=e[i].v;
        if(!dfn[to]){
            tarjan(to);
            low[now]=Min(low[now],low[to]);
        }
        else if(invis[to]) low[now]=Min(low[now],dfn[to]);
    }
    if(dfn[now]==low[now]){
        int cur=stk[top],count_=0;
        while(cur!=now){
            ++count_;invis[cur]=false;
            --top;cur=stk[top];
        }
        ++count_;
        invis[cur]=false;--top;
        if(count_>1)    minn=Min(minn,count_);
    }
}

il void input(){
    n=read();int v;
    for(rg i=1;i<=n;++i)    v=read(),add_edge(i,v);
}

int main(){
// freopen("tarjan.in","r",stdin);
    input();minn=inf;
    for(rg i=1;i<=n;++i)    if(!dfn[i]) tarjan(i);
    printf("%d\n",minn);
    return 0;
}

ST 表

应该没错,好像如果要检查的话还要

标签:register,int,康复,练习,板子,rg,cerr,il,define
From: https://www.cnblogs.com/sonnety-v0cali0d-kksk/p/fromal_exercise.html

相关文章

  • 推荐一款“自学编程”的宝藏网站!详解版~(在线编程练习,项目实战,免费Gpt等)
    ......
  • Day3 链表的一些基本练习
    Day3链表的基础练习最基本的删除节点Lc203我习惯的还是弄一个新的dummyhead,然后如果是要找的节点,就删除,删除完记得delete。//代码没什么好看的,主要就是熟悉链表的写法classSolution{public:ListNode*removeElements(ListNode*head,intval){ListNode......
  • python练习.8
    问:用户给了一串带有逗号的数字,要求用逗号分隔数字列表,并生成列表和元组。例:23,34,43,44,5,5==》['23','34','43','44','5','5']   ('23','34','43','44','5','5')defAyue():......
  • python练习.5
    问:计算并输出100-200不能被三整除的整数的和voidtest1(){ intarr[10]={2,3,1,4,5,7,6,8,9,10}; intsi=sizeof(arr)/sizeof(arr[0]); qsort(arr,si,sizeof(arr[0]),ayue2); qsort(arr,si,sizeof(arr[0]),ayue3); inti=0; for(i=0;i<si;i++)......
  • 请在课上练习的基础上,实现输出加减法混合的运算题目列表。请提交代码及运行效果截图。
    importjava.util.Random;publicclassMathOperationGenerator{  publicstaticvoidmain(String[]args){    intnumberOfQuestions=10;//指定生成题目的数量    generateMathQuestions(numberOfQuestions);  }  publicstaticvoidgenerateMat......
  • python练习.4
    问:从键盘输入十个数,统计非负数字的个数和非负数字的和defAyue():arr=[]i=0my_sum=0my_num=0whilei<10:x=int(input("请输入你要统计的数字:"))if(x>=0):arr.append(x)my_sum+=1my......
  • python练习.3
    问:已知abc都是一位数,求当三位数abc加上cba的和为1333时,abc分别的值defAyue():forainrange(10):forbinrange(10):forcinrange(10):ifa*100+b*10+c+c*100+b*10+a==1333:print(a,b,c)print(Ayue(......
  • python练习.2
    问:求n以内最大的,能被17整除的数.defAyue():a=[]x=int(input("请输入你要测试的数:"))foriinrange(1,x):ifi%17==0:a.append(i)print(f"在1~{x}中的数字能被17整除的数为:{i}")print(a)print(Ayue())......
  • CEIT 23练习编程题 题解
    本文部分题目提供c/c++两种解法,顺便可以让你们知道c++在面对某些题时的优势部分题目提供多种解法日期格式化C#include<stdio.h>intmain(){intm,d,y;scanf("%d-%d-%d",&m,&d,&y);printf("%04d-%02d-%02d",y,m,d);return0;}02d的含义:当有效数......
  • python练习.1
    问:一颗球从100米处落下,每次弹起高度减半,问弹跳n次后的高度,路程defAyue():i=1num=100.0x=float(input("请输入你想要知道的弹跳次数:"))sum=100*(1/2)**(x)print(f"最后的高度为:{sum}")while(i<=x):num+=100*(1/2)*......