Editorial for Quảng cáo


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

const maxn=2100;
var n,sm,m:longint;
    a:array[1..maxn,1..maxn] of byte;
    dau:array[1..maxn] of longint;

procedure re;
var i,x,y:longint;
begin
     fillchar(a,sizeof(a),0);
     readln(n,m);
     for i:=1 to m do
     begin
          readln(x,y);
          a[x,y]:=1;
          a[y,x]:=1;
     end;
end;
procedure duyet(x:longint);
var i:longint;
begin
     for i:=1 to n do
         if (dau[i]=0) and (a[x,i]=1) then
         begin
              dau[i]:=sm;
              duyet(i);
         end;
end;

procedure pr;
var i:longint;
begin
     fillchar(dau,sizeof(dau),0);
     sm:=0;
     for i:=1 to n do
         if dau[i]=0 then
         begin
              inc(sm); dau[i]:=sm;
              duyet(i);
         end;
end;

procedure wr;
begin
     write(m-n+sm);
end;
begin
     re;
     pr;
     wr;
end.

Code mẫu của happyboy99x

#include<cstdio>
#include<vector>
#include<queue>
using namespace std;

vector<vector<int> > g;
int n, m;
bool vst[2000];

int main() {
    scanf("%d%d", &n, &m); g.resize(n);
    for(int i = 0; i < m; ++i) {
        int x, y; scanf("%d%d", &x, &y);
        g[--x].push_back(--y);
        g[y].push_back(x);
    }
    int k = 0; //number of connected component
    for(int i = 0; i < n; ++i) if(!vst[i]) {
        ++k; queue<int> qu; qu.push(i);
        while(!qu.empty()) {
            int u = qu.front(); qu.pop();
            for(vector<int>::iterator it = g[u].begin(); it != g[u].end(); ++it) 
                if(!vst[*it]) {
                    vst[*it] = 1;
                    qu.push(*it);
                }
        }
    }
    printf("%d\n", m - n + k);
    return 0;
}

Code mẫu của ladpro98

#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <memory.h>
#include <cassert>
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define REP(i, a, b) for(int i = (a); i <=(b); i++)
#define FORD(i, a, b) for(int i = (a); i > (b); i--)
#define REPD(i, a, b) for(int i = (a); i >=(b); i--)
#define SZ(a) (int((a).size()))
#define ALL(a) (a).begin(), (a).end()
#define PB push_back
#define MP make_pair
#define LL long long
#define LD long double
#define II pair<int, int>
#define X first
#define Y second
#define VI vector<int>
const int N = 2200;
using namespace std;

struct dsu {
    int lab[N];
    int root(int u)
        {return lab[u] <= 0 ? u : (lab[u] = root(lab[u]));}
    void join(int u, int v) {
        if (lab[u] > lab[v]) swap(u, v);
        if (lab[u] == lab[v]) lab[u]--;
        lab[v] = u;
    }
} DS;
int n, m;

int main() {
    ios :: sync_with_stdio(0);
    cin >> n >> m;
    int ans = m, u, v;
    FOR(i, 0, m) {
        cin >> u >> v;
        int x = DS.root(u), y = DS.root(v);
        if (x != y) {DS.join(x, y); ans--;};
    }
    cout << ans;
    return 0;
}

Code mẫu của RR

{$R+,Q+}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=2001;
var
  f1,f2:text;
  n,m:longint;
  queue,deg,xet:array[1..MAXN] of longint;
  a:array[1..MAXN,1..MAXN] of longint;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1); close(f2);
end;
procedure inp;
var
  i,u,v:longint;
begin
  read(f1,n,m);
  for i:=1 to m do
    begin
      read(f1,u,v);
      inc(deg[u]); a[u,deg[u]]:=v;
      inc(deg[v]); a[v,deg[v]]:=u;
    end;
end;
procedure bfs(u:longint);
var
  i,v,first,last:longint;
begin
  first:=1; last:=1; queue[1]:=u; xet[u]:=1;
  while first<=last do
    begin
      u:=queue[first]; inc(first);
      for i:=1 to deg[u] do
        begin
          v:=a[u,i];
          if xet[v]=0 then
            begin xet[v]:=1; inc(last); queue[last]:=v; end;
        end;
    end;
end;
procedure solve;
var
  count,i:longint;
begin
  count:=m;
  for i:=1 to n do
    if xet[i]=0 then
      begin
        inc(count);
        bfs(i);
      end;
  writeln(f2,count-n);
end;
begin
  openF;
  inp;
  solve;
  closeF;
end.

Code mẫu của hieult

#include <set>
#include <map>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iomanip>
#include <iostream>
#include <algorithm>

#include <ctime>
#include <deque>
#include <bitset>
#include <cctype>
#include <utility>
#include <cassert>

using namespace std;

typedef long long ll;
typedef double ld;
typedef unsigned int ui;
typedef unsigned long long ull;

#define Rep(i,n) for(int i = 0; i < (n); ++i)
#define Repd(i,n) for(int i = (n)-1; i >= 0; --i)
#define For(i,a,b) for(int i = (a); i <= (b); ++i)
#define Ford(i,a,b) for(int i = (a); i >= (b); --i)
#define Fit(i,v) for(__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++i)
#define Fitd(i,v) for(__typeof((v).rbegin()) i = (v).rbegin(); i != (v).rend(); ++i)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define sz(a) ((int)(a).size())
#define all(a) (a).begin(), (a).end()
#define ms(a,x) memset(a, x, sizeof(a))

template<class F, class T> T convert(F a, int p = -1) { stringstream ss; if (p >= 0) ss << fixed << setprecision(p); ss << a; T r; ss >> r; return r; }
template<class T> T gcd(T a, T b) { T r; while (b != 0) { r = a % b; a = b; b = r; } return a; }
template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
template<class T> T sqr(T x) { return x * x; }
template<class T> T cube(T x) { return x * x * x; }
template<class T> int getbit(T s, int i) { return (s >> i) & 1; }
template<class T> T onbit(T s, int i) { return s | (T(1) << i); }
template<class T> T offbit(T s, int i) { return s & (~(T(1) << i)); }
template<class T> int cntbit(T s) { return s == 0 ? 0 : cntbit(s >> 1) + (s & 1); }

const int bfsz = 1 << 16;
char bf[bfsz + 5];
int rsz = 0;
int ptr = 0;
char gc() {
    if (rsz <= 0) {
        ptr = 0;
        rsz = (int) fread(bf, 1, bfsz, stdin);
        if (rsz <= 0)
            return EOF;
    }
    --rsz;
    return bf[ptr++];
}
void ga(char &c) {
    c = EOF;
    while (!isalpha(c))
        c = gc();
}
int gs(char s[]) {
    int l = 0;
    char c = gc();
    while (isspace(c))
        c = gc();
    while (c != EOF && !isspace(c)) {
        s[l++] = c;
        c = gc();
    }
    s[l] = '\0';
    return l;
}
template<class T> bool gi(T &v) {
    v = 0;
    char c = gc();
    while (c != EOF && c != '-' && !isdigit(c))
        c = gc();
    if (c == EOF)
        return false;
    bool neg = c == '-';
    if (neg)
        c = gc();
    while (isdigit(c)) {
        v = v * 10 + c - '0';
        c = gc();
    }
    if (neg)
        v = -v;
    return true;
}

typedef pair<int, int> II;

const ld PI = acos(-1.0);
const ld eps = 1e-9;

const int dr[] = {0, +1, 0, -1};
const int dc[] = {+1, 0, -1, 0};

const int inf = (int)1e9 + 5;
const ll linf = (ll)1e16 + 5;
const ll mod = (ll)1e9 + 7;

#define maxn 10005

int n, m;
int adj[maxn], last[maxn], next[maxn], E, flag[maxn];

void add(int u, int v){
    adj[E] = v; next[E] = last[u]; last[u] = E++;
    adj[E] = u; next[E] = last[v]; last[v] = E++;
}

void go(int u){
    flag[u] = 1;
    for(int e = last[u]; e != -1; e = next[e]){
        int v = adj[e];
        if(!flag[v]) go(v);
    }
}

int  main()
{
//  freopen("in.txt", "r", stdin);

    cin >> n >> m;
    ms(last, -1);
    E = 0;
    int u, v;

    Rep(run, m){
        cin >> u >> v;
        add(u, v);
    }
    ms(flag, 0);
    int num = 0;
    For(i, 1, n) if(!flag[i]){
        num++; go(i);
    }

    cout << m + num - n << endl;

    return 0;
}

Code mẫu của ll931110

{$MODE DELPHI}
Program ADS;
Const
  input  = '';
  output = '';
  maxn = 20000;
  maxm = 50000;
Var
  free: array[1..maxn] of boolean;
  adj,x,y: array[1..maxm] of integer;
  h: array[1..maxn + 1] of integer;
  n,m: integer;

Procedure LoadGraph;
Var
  f: text;
  i: integer;
Begin
  Fillchar(h, sizeof(h), 0);
  Assign(f, input);
    Reset(f);

    Readln(f, n, m);
    For i:= 1 to m do
      Begin
        Readln(f, x[i], y[i]);
        inc(h[x[i]]);
        inc(h[y[i]]);
      End;
  Close(f);

  For i:= 2 to n do h[i]:= h[i] + h[i - 1];
  For i:= 1 to m do
    Begin
      adj[h[x[i]]]:= y[i];
      dec(h[x[i]]);
      adj[h[y[i]]]:= x[i];
      dec(h[y[i]]);
    End;
  h[n + 1]:= 2 * m;
End;

Procedure DFS(u: integer);
Var
  iv,v: integer;
Begin
  For iv:= h[u] + 1 to h[u + 1] do
    Begin
      v:= adj[iv];
      If free[v] then
        Begin
          free[v]:= false;
          DFS(v);
        End;
    End;
End;

Procedure solve;
Var
  f: text;
  i,cnt: integer;
Begin
  cnt:= 0;
  Fillchar(free, sizeof(free), true);
  For i:= 1 to n do if free[i] then
    Begin
      inc(cnt);
      free[i]:= false;
      DFS(i);
    End;

  Assign(f, output);
    Rewrite(f);
    Writeln(f, m - n + cnt);
  Close(f);
End;

Begin
  LoadGraph;
  solve;
End.

Code mẫu của khuc_tuan

//{$APPTYPE CONSOLE}
 {$mode delphi}

uses math, sysutils;

type
    Node = class
        i : integer;
        n : Node;
    end;

var
    ke : array[1..2000] of Node;
    res, m, i, u, v, n : integer;
    vs : array[1..2000] of boolean;

procedure AddList(var n : Node; u : integer);
var
    p : Node;
begin
    p := Node.Create;
    p.i := u;
    p.n := n;
    n := p;
end;

procedure dfs(i, tr : integer);
var
    p : Node;
    j : integer;
begin
    vs[i] := true;
    p := ke[i];
    while p<>nil do
    begin
        j := p.i;
        if not vs[j] then dfs(j, i)
        else if j <> tr then inc(res);
        p := p.n;
    end;
end;

begin
    readln(n,m);
    for i:=1 to m do
    begin
        readln(u,v);
        addList(ke[u], v);
        addList(ke[v], u);
    end;
    for i:=1 to n do
        if not vs[i] then
        begin
            dfs(i, -1);
        end;
    writeln(res div 2);
end.

Comments

Please read the guidelines before commenting.


There are no comments at the moment.