Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
11년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
3 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
97 행
복사
29 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
121 행
복사
#include <cstdio>
#include <cstdio>
#include <cstdlib>
#include <cstdlib>
#include <cstring>
#include <cstring>
#include <algorithm>
#include <algorithm>
#include <utility>
#include <utility>
#include <string>
#include <string>
#include <iostream>
#include <iostream>
#include <cmath>
#include <cmath>
#define MAXN 400005
#define MAXN 400005
using namespace std;
using namespace std;
struct datanode
struct datanode
{
{
int a, b;
int a, b;
};
};
static int s[MAXN];
static int s[MAXN];
static int a[MAXN];
static int a[MAXN];
static int p[MAXN];
static int p[MAXN];
static char b[MAXN];
static char b[MAXN];
static int res[MAXN];
static int res[MAXN];
int resc;
int resc;
void DFS (int point, int par)
void DFS (int point, int par)
{
{
res[resc] = point;
res[resc] = point;
resc++;
resc++;
p[point] ^= 1;
p[point] ^= 1;
int i;
int i;
for (i = s[point]; i < s[point+1]; i++)
for (i = s[point]; i < s[point+1]; i++)
{
{
if (!b[a[i]])
if (!b[a[i]])
{
{
b[a[i]] = 1;
b[a[i]] = 1;
DFS(a[i], point);
DFS(a[i], point);
}
}
}
}
if (par == -1)
if (par == -1)
{
{
복사
복사됨
복사
복사됨
if (p[point])
resc--;
if (p[point])
{
resc--;
p[point] ^= 1;
}
return;
return;
}
}
if (p[point])
if (p[point])
{
{
res[resc] = par;
res[resc] = par;
resc++;
resc++;
p[par] ^= 1;
p[par] ^= 1;
res[resc] = point;
res[resc] = point;
resc++;
resc++;
p[point] ^= 1;
p[point] ^= 1;
}
}
res[resc] = par;
res[resc] = par;
resc++;
resc++;
p[par] ^= 1;
p[par] ^= 1;
}
}
int main ()
int main ()
{
{
int N, M;
int N, M;
scanf("%d %d",&N,&M);
scanf("%d %d",&N,&M);
static struct datanode data[MAXN];
static struct datanode data[MAXN];
memset(s,0,sizeof(s));
memset(s,0,sizeof(s));
int i;
int i;
for (i = 0; i < M; i++)
for (i = 0; i < M; i++)
{
{
scanf("%d %d",&(data[i].a),&(data[i].b));
scanf("%d %d",&(data[i].a),&(data[i].b));
(data[i].a)--;
(data[i].a)--;
(data[i].b)--;
(data[i].b)--;
s[data[i].a]++;
s[data[i].a]++;
s[data[i].b]++;
s[data[i].b]++;
}
}
for (i = 1; i <= N; i++) s[i] += s[i-1];
for (i = 1; i <= N; i++) s[i] += s[i-1];
for (i = 0; i < M; i++)
for (i = 0; i < M; i++)
{
{
s[data[i].a]--;
s[data[i].a]--;
a[s[data[i].a]] = data[i].b;
a[s[data[i].a]] = data[i].b;
s[data[i].b]--;
s[data[i].b]--;
a[s[data[i].b]] = data[i].a;
a[s[data[i].b]] = data[i].a;
}
}
memset(b,0,sizeof(b));
memset(b,0,sizeof(b));
for (i = 0; i < N; i++) scanf("%d",&(p[i]));
for (i = 0; i < N; i++) scanf("%d",&(p[i]));
resc = 0;
resc = 0;
복사
복사됨
복사
복사됨
b[0
] = 1;
DFS(
0
, -1);
int point = 0;
while ((point < N) && (!p[point])) point++;
if (point == N)
{
printf("0\n");
return 0;
}
b[point
] = 1;
DFS(
point
, -1);
for (i = 0; i < N; i++)
{
if (p[i])
{
printf("-1\n");
return 0;
}
}
printf("%d\n",resc);
printf("%d\n",resc);
if (resc)
if (resc)
{
{
for (i = 0; i < resc; i++)
for (i = 0; i < resc; i++)
{
{
if (i) printf(" ");
if (i) printf(" ");
printf("%d",res[i] + 1);
printf("%d",res[i] + 1);
}
}
printf("\n");
printf("\n");
}
}
return 0;
return 0;
}
}
저장된 비교 결과
원본
파일 열기
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <utility> #include <string> #include <iostream> #include <cmath> #define MAXN 400005 using namespace std; struct datanode { int a, b; }; static int s[MAXN]; static int a[MAXN]; static int p[MAXN]; static char b[MAXN]; static int res[MAXN]; int resc; void DFS (int point, int par) { res[resc] = point; resc++; p[point] ^= 1; int i; for (i = s[point]; i < s[point+1]; i++) { if (!b[a[i]]) { b[a[i]] = 1; DFS(a[i], point); } } if (par == -1) { if (p[point]) resc--; return; } if (p[point]) { res[resc] = par; resc++; p[par] ^= 1; res[resc] = point; resc++; p[point] ^= 1; } res[resc] = par; resc++; p[par] ^= 1; } int main () { int N, M; scanf("%d %d",&N,&M); static struct datanode data[MAXN]; memset(s,0,sizeof(s)); int i; for (i = 0; i < M; i++) { scanf("%d %d",&(data[i].a),&(data[i].b)); (data[i].a)--; (data[i].b)--; s[data[i].a]++; s[data[i].b]++; } for (i = 1; i <= N; i++) s[i] += s[i-1]; for (i = 0; i < M; i++) { s[data[i].a]--; a[s[data[i].a]] = data[i].b; s[data[i].b]--; a[s[data[i].b]] = data[i].a; } memset(b,0,sizeof(b)); for (i = 0; i < N; i++) scanf("%d",&(p[i])); resc = 0; b[0] = 1; DFS(0, -1); printf("%d\n",resc); if (resc) { for (i = 0; i < resc; i++) { if (i) printf(" "); printf("%d",res[i] + 1); } printf("\n"); } return 0; }
수정본
파일 열기
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <utility> #include <string> #include <iostream> #include <cmath> #define MAXN 400005 using namespace std; struct datanode { int a, b; }; static int s[MAXN]; static int a[MAXN]; static int p[MAXN]; static char b[MAXN]; static int res[MAXN]; int resc; void DFS (int point, int par) { res[resc] = point; resc++; p[point] ^= 1; int i; for (i = s[point]; i < s[point+1]; i++) { if (!b[a[i]]) { b[a[i]] = 1; DFS(a[i], point); } } if (par == -1) { if (p[point]) { resc--; p[point] ^= 1; } return; } if (p[point]) { res[resc] = par; resc++; p[par] ^= 1; res[resc] = point; resc++; p[point] ^= 1; } res[resc] = par; resc++; p[par] ^= 1; } int main () { int N, M; scanf("%d %d",&N,&M); static struct datanode data[MAXN]; memset(s,0,sizeof(s)); int i; for (i = 0; i < M; i++) { scanf("%d %d",&(data[i].a),&(data[i].b)); (data[i].a)--; (data[i].b)--; s[data[i].a]++; s[data[i].b]++; } for (i = 1; i <= N; i++) s[i] += s[i-1]; for (i = 0; i < M; i++) { s[data[i].a]--; a[s[data[i].a]] = data[i].b; s[data[i].b]--; a[s[data[i].b]] = data[i].a; } memset(b,0,sizeof(b)); for (i = 0; i < N; i++) scanf("%d",&(p[i])); resc = 0; int point = 0; while ((point < N) && (!p[point])) point++; if (point == N) { printf("0\n"); return 0; } b[point] = 1; DFS(point, -1); for (i = 0; i < N; i++) { if (p[i]) { printf("-1\n"); return 0; } } printf("%d\n",resc); if (resc) { for (i = 0; i < resc; i++) { if (i) printf(" "); printf("%d",res[i] + 1); } printf("\n"); } return 0; }
비교하기