這題我犯了乙個邏輯錯誤,人傻了,想了半天也沒debug出來;
做法:是這樣乙個邏輯問題,乙個點不是控制點,就是如果有控制點連到它就行了。
但,乙個點是控制點,不是說連到它的點不是控制點就行了,只要有乙個連到它的控制點,那它就不是控制點。
標準錯誤解法:
這個想法就是,vis=1表示他是控制點,如果乙個點不是控制點,那麼他的所有鄰居就是控制點。
這肯定是錯了,如果他的鄰居有其他控制點可以連到呢?那這個鄰居就不是控制點。
#includeusingview codenamespace
std;
const
int n=1e5+5
;#define pb push_back
bool
vis[n];
int ans,in
[n];
intn,m;
vector
e[n];
void
toposort()
}}intmain()
ans=0
; toposort();
printf(
"%d\n
",ans);
return0;
}
正確解法:邏輯正確;
如果乙個點是控制點,那麼他的所有鄰居就不是控制點。這個是正確的邏輯;】
#includeusingview codenamespace
std;
const
int n=1e5+5
;#define pb push_back
bool
vis[n];
int ans,in
[n];
intn,m;
vector
e[n];
void
toposort()
}}intmain()
ans=0
; toposort();
printf(
"%d\n
",ans);
return0;
}
中模擬:題意:給你乙個課的時間,讓你排乙個課表,每次問你這天的課程;
做法:這題主要是不好表示,setcourse[n][7];表示第幾周,第幾天的課程;
然後插入遍歷,本來想搞個優先佇列,但是無法遍歷,所以只能set;
#include usingview codenamespace
std;
#define pb push_backtypedef
long
long
ll;typedef
long
double
ldb;
const
int n=1e4+5
;struct cla
friend
bool
operator
};bool cmp(cla a,cla b)
setcourse[n][7
];int mp[350
];int
main()
}if(i==n)q=sw;
}while(q--)
//system("pause");
return0;
}
題意:給你兩個圖,判斷是否聯通同構;
做法:看明白以後這題真的是。。。。
其實判斷是否聯通同構真的很簡單,每次讀入u,v;
用乙個cnt表示兩個集合的差,那麼每次加入u,v的話,看看另乙個集合u,v是否聯通。
如果聯通,cnt--,否則cnt++;
#includeusingview codenamespace
std;
#define pb push_backtypedef
long
long
ll;const
int n=2e5+5
;const
int inf=0x3f3f3f3f
;int
fa1[n],fa2[n];
int find1(int x)
int find2(int x)
void build1(int x,int y)
void build2(int x,int y)
intmain()
else
if(!cnt)puts("a"
);
else puts("b"
); }
return0;
}
洛谷春季 ACM 多校訓練第五周
二分圖匹配 回憶一下二分圖匹配演算法,乙個點被匹配當且僅當 match v findpath match v 但你記錄時一定要用乙個vis來記錄,不然一定會卡在某乙個點出不來。而且每次找增廣路都必須清空vis。注意 1.定義乙個vis,否則陷入乙個點找增廣路出不來,2.每次遍歷清空vis,否則答案必...
洛谷春季ACM多校賽 Final Spark
題目描述 有乙個長無限,寬為 w t 的長方形,去切割乙個半徑為 s 的圓,問如何切割可以使得其切割所對應的弧最長,求其佔據的比例,一共有t組測試資料 樣例3 2020 20100000 1001000 100100 1982000 1.000000000 0.000000000 0.5032153...
牛客網暑期ACM多校訓練營(第二場)
a run 基礎dp,直接做就行了。dp時候求出來到哪個距離有幾種走法,然後求一下字首和。輸出答案的時候減一下就行了。include include include include include include include include using namespace std define ...